@usereactify/search 5.3.0 → 5.3.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.
- package/CHANGELOG.md +14 -0
- package/dist/package.json +1 -1
- package/dist/src/components/Sensor/SensorSearchTerm.js +39 -10
- package/dist/src/components/Sensor/SensorSearchTerm.js.map +1 -1
- package/dist/src/hooks/reactivesearch/index.d.ts +0 -1
- package/dist/src/hooks/reactivesearch/index.js +0 -1
- package/dist/src/hooks/reactivesearch/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/hooks/reactivesearch/useReactiveDataSearchProps.d.ts +0 -27
- package/dist/src/hooks/reactivesearch/useReactiveDataSearchProps.js +0 -71
- package/dist/src/hooks/reactivesearch/useReactiveDataSearchProps.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [5.3.2](https://bitbucket.org/usereactify/reactify-search-ui/compare/release-v5.3.1...release-v5.3.2) (2022-09-25)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* add debounce and tracking to search term sensor ([7563319](https://bitbucket.org/usereactify/reactify-search-ui/commit/75633197026554b1835ab1f683edc5cc8fcb35c7))
|
|
11
|
+
|
|
12
|
+
### [5.3.1](https://bitbucket.org/usereactify/reactify-search-ui/compare/release-v5.3.0...release-v5.3.1) (2022-09-15)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* weight search matches higher when field starts with term ([db1d430](https://bitbucket.org/usereactify/reactify-search-ui/commit/db1d43024dc97fb2547c7656b109d34becee6e45))
|
|
18
|
+
|
|
5
19
|
## [5.3.0](https://bitbucket.org/usereactify/reactify-search-ui/compare/release-v5.2.3...release-v5.3.0) (2022-09-15)
|
|
6
20
|
|
|
7
21
|
|
package/dist/package.json
CHANGED
|
@@ -5,11 +5,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.SensorSearchTerm = void 0;
|
|
7
7
|
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const ahooks_1 = require("ahooks");
|
|
8
9
|
const DataSearch_1 = __importDefault(require("@appbaseio/reactivesearch/lib/components/search/DataSearch"));
|
|
9
10
|
const hooks_1 = require("../../hooks");
|
|
10
11
|
const SensorSearchTerm = () => {
|
|
11
12
|
const { options, config } = (0, hooks_1.useReactifySearchContext)();
|
|
13
|
+
const { track } = (0, hooks_1.useAnalytics)();
|
|
12
14
|
const { searchTerm } = (0, hooks_1.useSearch)();
|
|
15
|
+
const [searchTermDebounced, setSearchTermDebounced] = react_1.default.useState("");
|
|
13
16
|
// ignore search fields only set for instant search
|
|
14
17
|
const searchFields = react_1.default.useMemo(() => {
|
|
15
18
|
if (options.mode === "search") {
|
|
@@ -20,17 +23,42 @@ const SensorSearchTerm = () => {
|
|
|
20
23
|
}
|
|
21
24
|
return [];
|
|
22
25
|
}, [config.fields]);
|
|
26
|
+
const { run: runDebouncedTriggerQuery, cancel: cancelDebouncedTriggerQuery } = (0, ahooks_1.useDebounceFn)((value) => {
|
|
27
|
+
setSearchTermDebounced(value);
|
|
28
|
+
if (!value || (value && value.length < 3)) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
track({
|
|
32
|
+
eventName: "search",
|
|
33
|
+
payload: {
|
|
34
|
+
searchTerm: value,
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
}, {
|
|
38
|
+
wait: 300,
|
|
39
|
+
});
|
|
40
|
+
react_1.default.useEffect(() => {
|
|
41
|
+
runDebouncedTriggerQuery(searchTerm);
|
|
42
|
+
}, [searchTerm]);
|
|
23
43
|
if (searchFields.length === 0) {
|
|
24
44
|
return null;
|
|
25
45
|
}
|
|
26
46
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
27
|
-
react_1.default.createElement(DataSearch_1.default, { fuzziness: 1, queryFormat: "and", autosuggest: false, value:
|
|
47
|
+
react_1.default.createElement(DataSearch_1.default, { fuzziness: 1, queryFormat: "and", autosuggest: false, value: searchTermDebounced, componentId: "SensorSearchTerm", style: { display: "none" }, dataField: searchFields.map((field) => field.field), fieldWeights: searchFields.map((field) => field.importance), customQuery: (value, props) => {
|
|
28
48
|
const { dataField, fieldWeights } = props;
|
|
29
49
|
const fieldsCrossFields = dataField.map((field, index) => `${field}^${fieldWeights[index]}`);
|
|
30
50
|
const fieldsPhrase = dataField.map((field, index) => `${field}^${fieldWeights[index]}`);
|
|
31
51
|
const fieldsPhrasePrefix = dataField
|
|
32
52
|
.map((field, index) => `${field}^${fieldWeights[index]}`)
|
|
33
53
|
.filter((field) => !field.includes("."));
|
|
54
|
+
const fieldsSpanFirst = dataField.map((field) => ({
|
|
55
|
+
span_first: {
|
|
56
|
+
match: {
|
|
57
|
+
span_term: { [`${field}`]: value },
|
|
58
|
+
},
|
|
59
|
+
end: 1,
|
|
60
|
+
},
|
|
61
|
+
}));
|
|
34
62
|
const query = {
|
|
35
63
|
bool: {
|
|
36
64
|
should: [
|
|
@@ -48,42 +76,43 @@ const SensorSearchTerm = () => {
|
|
|
48
76
|
},
|
|
49
77
|
]
|
|
50
78
|
: []),
|
|
51
|
-
...(
|
|
79
|
+
...(fieldsPhrase.length > 0
|
|
52
80
|
? [
|
|
53
81
|
{
|
|
54
82
|
multi_match: {
|
|
55
83
|
query: value,
|
|
56
|
-
fields:
|
|
57
|
-
type: "
|
|
84
|
+
fields: fieldsPhrase,
|
|
85
|
+
type: "phrase",
|
|
58
86
|
operator: "and",
|
|
59
87
|
},
|
|
60
88
|
},
|
|
61
89
|
]
|
|
62
90
|
: []),
|
|
63
|
-
...(
|
|
91
|
+
...(fieldsPhrasePrefix.length > 0
|
|
64
92
|
? [
|
|
65
93
|
{
|
|
66
94
|
multi_match: {
|
|
67
95
|
query: value,
|
|
68
|
-
fields:
|
|
69
|
-
type: "
|
|
96
|
+
fields: fieldsPhrasePrefix,
|
|
97
|
+
type: "phrase_prefix",
|
|
70
98
|
operator: "and",
|
|
71
99
|
},
|
|
72
100
|
},
|
|
73
101
|
]
|
|
74
102
|
: []),
|
|
75
|
-
...(
|
|
103
|
+
...(fieldsCrossFields.length > 0
|
|
76
104
|
? [
|
|
77
105
|
{
|
|
78
106
|
multi_match: {
|
|
79
107
|
query: value,
|
|
80
|
-
fields:
|
|
81
|
-
type: "
|
|
108
|
+
fields: fieldsCrossFields,
|
|
109
|
+
type: "cross_fields",
|
|
82
110
|
operator: "and",
|
|
83
111
|
},
|
|
84
112
|
},
|
|
85
113
|
]
|
|
86
114
|
: []),
|
|
115
|
+
...(fieldsSpanFirst.length > 0 ? [...fieldsSpanFirst] : []),
|
|
87
116
|
],
|
|
88
117
|
minimum_should_match: "1",
|
|
89
118
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SensorSearchTerm.js","sourceRoot":"","sources":["../../../../src/components/Sensor/SensorSearchTerm.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,4GAAoF;AAEpF,
|
|
1
|
+
{"version":3,"file":"SensorSearchTerm.js","sourceRoot":"","sources":["../../../../src/components/Sensor/SensorSearchTerm.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport { useDebounceFn } from \"ahooks\";\nimport DataSearch from \"@appbaseio/reactivesearch/lib/components/search/DataSearch\";\n\nimport { useAnalytics, useReactifySearchContext, useSearch } from \"../../hooks\";\n\nexport const SensorSearchTerm: React.FC = () => {\n const { options, config } = useReactifySearchContext();\n const { track } = useAnalytics();\n const { searchTerm } = useSearch();\n const [searchTermDebounced, setSearchTermDebounced] =\n React.useState<string>(\"\");\n\n // ignore search fields only set for instant search\n const searchFields = React.useMemo(() => {\n if (options.mode === \"search\") {\n return config.fields.filter((field) =>\n [\"always_search\", \"search_page\"].includes(field.searchType)\n );\n }\n\n if (options.mode === \"instant-search\") {\n return config.fields.filter((field) =>\n [\"always_search\", \"instant_search\"].includes(field.searchType)\n );\n }\n\n return [];\n }, [config.fields]);\n\n const { run: runDebouncedTriggerQuery, cancel: cancelDebouncedTriggerQuery } =\n useDebounceFn(\n (value: string) => {\n setSearchTermDebounced(value);\n\n if (!value || (value && value.length < 3)) {\n return;\n }\n\n track({\n eventName: \"search\",\n payload: {\n searchTerm: value,\n },\n });\n },\n {\n wait: 300,\n }\n );\n\n React.useEffect(() => {\n runDebouncedTriggerQuery(searchTerm);\n }, [searchTerm]);\n\n if (searchFields.length === 0) {\n return null;\n }\n\n return (\n <>\n <DataSearch\n fuzziness={1}\n queryFormat=\"and\"\n autosuggest={false}\n value={searchTermDebounced}\n componentId=\"SensorSearchTerm\"\n style={{ display: \"none\" }}\n dataField={searchFields.map((field) => field.field)}\n fieldWeights={searchFields.map((field) => field.importance)}\n customQuery={(value, props) => {\n const { dataField, fieldWeights } = props;\n\n const fieldsCrossFields = dataField.map(\n (field: string, index: number) => `${field}^${fieldWeights[index]}`\n );\n\n const fieldsPhrase = dataField.map(\n (field: string, index: number) => `${field}^${fieldWeights[index]}`\n );\n\n const fieldsPhrasePrefix = dataField\n .map(\n (field: string, index: number) =>\n `${field}^${fieldWeights[index]}`\n )\n .filter((field: string) => !field.includes(\".\"));\n\n const fieldsSpanFirst: any = dataField.map((field: string) => ({\n span_first: {\n match: {\n span_term: { [`${field}`]: value },\n },\n end: 1,\n },\n }));\n\n const query = {\n bool: {\n should: [\n ...(options.mode === \"search\" && value\n ? [\n {\n nested: {\n path: \"curations\",\n query: {\n term: {\n \"curations.searchTerm.keyword\":\n value.toLowerCase(),\n },\n },\n },\n },\n ]\n : []),\n ...(fieldsPhrase.length > 0\n ? [\n {\n multi_match: {\n query: value,\n fields: fieldsPhrase,\n type: \"phrase\",\n operator: \"and\",\n },\n },\n ]\n : []),\n ...(fieldsPhrasePrefix.length > 0\n ? [\n {\n multi_match: {\n query: value,\n fields: fieldsPhrasePrefix,\n type: \"phrase_prefix\",\n operator: \"and\",\n },\n },\n ]\n : []),\n ...(fieldsCrossFields.length > 0\n ? [\n {\n multi_match: {\n query: value,\n fields: fieldsCrossFields,\n type: \"cross_fields\",\n operator: \"and\",\n },\n },\n ]\n : []),\n ...(fieldsSpanFirst.length > 0 ? [...fieldsSpanFirst] : []),\n ],\n minimum_should_match: \"1\",\n },\n };\n return { query };\n }}\n />\n </>\n );\n};\n"]}
|
|
@@ -11,7 +11,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
__exportStar(require("./useReactiveBaseProps"), exports);
|
|
14
|
-
__exportStar(require("./useReactiveDataSearchProps"), exports);
|
|
15
14
|
__exportStar(require("./useReactiveFilterListProps"), exports);
|
|
16
15
|
__exportStar(require("./useReactiveFilterRangeProps"), exports);
|
|
17
16
|
__exportStar(require("./useReactiveFilterSliderProps"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/hooks/reactivesearch/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yDAAuC;AACvC,+DAA6C;AAC7C
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/hooks/reactivesearch/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yDAAuC;AACvC,+DAA6C;AAC7C,gEAA8C;AAC9C,iEAA+C;AAC/C,iEAA+C;AAC/C,yDAAuC;AACvC,iEAA+C","sourcesContent":["export * from \"./useReactiveBaseProps\";\nexport * from \"./useReactiveFilterListProps\";\nexport * from \"./useReactiveFilterRangeProps\";\nexport * from \"./useReactiveFilterSliderProps\";\nexport * from \"./useReactiveFilterSharedProps\";\nexport * from \"./useReactiveReactProp\";\nexport * from \"./useReactiveReactiveListProps\";\n"]}
|
package/package.json
CHANGED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
export declare const useReactiveDataSearchProps: (options: {
|
|
3
|
-
[key: string]: any;
|
|
4
|
-
debounce?: number | undefined;
|
|
5
|
-
placeholder?: string | undefined;
|
|
6
|
-
inputClassName?: string | undefined;
|
|
7
|
-
}) => {
|
|
8
|
-
debounce?: number | undefined;
|
|
9
|
-
placeholder: string;
|
|
10
|
-
inputClassName?: string | undefined;
|
|
11
|
-
type: string;
|
|
12
|
-
showIcon: boolean;
|
|
13
|
-
fuzziness: 0 | 1 | 2 | "AUTO";
|
|
14
|
-
queryFormat: "and" | "or";
|
|
15
|
-
autosuggest: boolean;
|
|
16
|
-
value: string;
|
|
17
|
-
onKeyUp: (event: React.KeyboardEvent) => void;
|
|
18
|
-
componentId: string;
|
|
19
|
-
dataField: string[];
|
|
20
|
-
fieldWeights: number[];
|
|
21
|
-
onChange: (value: string, triggerQuery: () => {}) => void;
|
|
22
|
-
onBlur: () => void;
|
|
23
|
-
onFocus: () => void;
|
|
24
|
-
innerClass: {
|
|
25
|
-
input: string | undefined;
|
|
26
|
-
};
|
|
27
|
-
};
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.useReactiveDataSearchProps = void 0;
|
|
7
|
-
const react_1 = __importDefault(require("react"));
|
|
8
|
-
const ahooks_1 = require("ahooks");
|
|
9
|
-
const hooks_1 = require("../../hooks");
|
|
10
|
-
// default field for when zero search fields have been configured in Reactify
|
|
11
|
-
const defaultSearchField = {
|
|
12
|
-
id: "title",
|
|
13
|
-
field: "title",
|
|
14
|
-
importance: 0,
|
|
15
|
-
searchType: "instant_search",
|
|
16
|
-
};
|
|
17
|
-
const useReactiveDataSearchProps = (options) => {
|
|
18
|
-
var _a;
|
|
19
|
-
const { config } = (0, hooks_1.useReactifySearchContext)();
|
|
20
|
-
const { searchTerm, submitSearchTerm, setSearchTerm, setShowInstantSearchResults, } = (0, hooks_1.useSearch)();
|
|
21
|
-
const searchFields = react_1.default.useMemo(() => 0 < config.fields.length
|
|
22
|
-
? config.fields.filter((field) => ["always_search", "instant_search"].includes(field.searchType))
|
|
23
|
-
: [defaultSearchField], []);
|
|
24
|
-
const handleKeyPress = react_1.default.useCallback((event) => {
|
|
25
|
-
if ("Enter" !== event.key)
|
|
26
|
-
return;
|
|
27
|
-
submitSearchTerm();
|
|
28
|
-
}, [submitSearchTerm]);
|
|
29
|
-
const { track } = (0, hooks_1.useAnalytics)();
|
|
30
|
-
const trackQuery = react_1.default.useCallback(() => {
|
|
31
|
-
if (!searchTerm || (searchTerm && searchTerm.length < 3))
|
|
32
|
-
return;
|
|
33
|
-
track({ eventName: "search", payload: { searchTerm: searchTerm } });
|
|
34
|
-
}, [searchTerm, track]);
|
|
35
|
-
const { run: runDebouncedTriggerQuery, cancel: cancelDebouncedTriggerQuery } = (0, ahooks_1.useDebounceFn)((triggerQuery) => {
|
|
36
|
-
triggerQuery();
|
|
37
|
-
trackQuery();
|
|
38
|
-
}, {
|
|
39
|
-
wait: (_a = options.debounce) !== null && _a !== void 0 ? _a : 300,
|
|
40
|
-
});
|
|
41
|
-
const reactiveDataSearchProps = react_1.default.useMemo(() => {
|
|
42
|
-
var _a;
|
|
43
|
-
return (Object.assign({ type: "search", showIcon: false, fuzziness: 1, queryFormat: "and", autosuggest: false, value: searchTerm !== null && searchTerm !== void 0 ? searchTerm : "", onKeyUp: handleKeyPress, componentId: "SearchInput", placeholder: (_a = options.placeholder) !== null && _a !== void 0 ? _a : "Search for a product...", dataField: searchFields.map((field) => field.field), fieldWeights: searchFields.map((field) => field.importance), onChange: (value, triggerQuery) => {
|
|
44
|
-
setSearchTerm(value);
|
|
45
|
-
if (!!value) {
|
|
46
|
-
runDebouncedTriggerQuery(triggerQuery);
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
cancelDebouncedTriggerQuery();
|
|
50
|
-
}
|
|
51
|
-
}, onBlur: () => {
|
|
52
|
-
// setTimeout ensures that results are still clickable before close
|
|
53
|
-
setTimeout(() => setShowInstantSearchResults(false), 300);
|
|
54
|
-
}, onFocus: () => {
|
|
55
|
-
setShowInstantSearchResults(true);
|
|
56
|
-
}, innerClass: {
|
|
57
|
-
input: options.inputClassName,
|
|
58
|
-
} }, options));
|
|
59
|
-
}, [
|
|
60
|
-
searchTerm,
|
|
61
|
-
handleKeyPress,
|
|
62
|
-
options.placeholder,
|
|
63
|
-
searchFields,
|
|
64
|
-
setSearchTerm,
|
|
65
|
-
runDebouncedTriggerQuery,
|
|
66
|
-
cancelDebouncedTriggerQuery,
|
|
67
|
-
]);
|
|
68
|
-
return reactiveDataSearchProps;
|
|
69
|
-
};
|
|
70
|
-
exports.useReactiveDataSearchProps = useReactiveDataSearchProps;
|
|
71
|
-
//# sourceMappingURL=useReactiveDataSearchProps.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useReactiveDataSearchProps.js","sourceRoot":"","sources":["../../../../src/hooks/reactivesearch/useReactiveDataSearchProps.ts"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport { useDebounceFn } from \"ahooks\";\n\nimport type { ConfigField } from \"../../types/config\";\n\nimport { useReactifySearchContext, useSearch, useAnalytics } from \"../../hooks\";\n\n// default field for when zero search fields have been configured in Reactify\nconst defaultSearchField: ConfigField = {\n id: \"title\",\n field: \"title\",\n importance: 0,\n searchType: \"instant_search\",\n};\n\nexport const useReactiveDataSearchProps = (options: {\n [key: string]: any;\n debounce?: number;\n placeholder?: string;\n inputClassName?: string;\n}) => {\n const { config } = useReactifySearchContext();\n const {\n searchTerm,\n submitSearchTerm,\n setSearchTerm,\n setShowInstantSearchResults,\n } = useSearch();\n\n const searchFields = React.useMemo(\n () =>\n 0 < config.fields.length\n ? config.fields.filter((field) =>\n [\"always_search\", \"instant_search\"].includes(field.searchType)\n )\n : [defaultSearchField],\n []\n );\n\n const handleKeyPress = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (\"Enter\" !== event.key) return;\n submitSearchTerm();\n },\n [submitSearchTerm]\n );\n\n const { track } = useAnalytics();\n\n const trackQuery = React.useCallback(() => {\n if (!searchTerm || (searchTerm && searchTerm.length < 3)) return;\n track({ eventName: \"search\", payload: { searchTerm: searchTerm } });\n }, [searchTerm, track]);\n\n const { run: runDebouncedTriggerQuery, cancel: cancelDebouncedTriggerQuery } =\n useDebounceFn(\n (triggerQuery: () => void) => {\n triggerQuery();\n trackQuery();\n },\n {\n wait: options.debounce ?? 300,\n }\n );\n\n const reactiveDataSearchProps = React.useMemo(\n () => ({\n type: \"search\",\n showIcon: false,\n fuzziness: 1 as 0 | 1 | 2 | \"AUTO\",\n queryFormat: \"and\" as \"and\" | \"or\",\n autosuggest: false,\n value: searchTerm ?? \"\",\n onKeyUp: handleKeyPress,\n componentId: \"SearchInput\",\n placeholder: options.placeholder ?? \"Search for a product...\",\n dataField: searchFields.map((field) => field.field),\n fieldWeights: searchFields.map((field) => field.importance),\n onChange: (value: string, triggerQuery: () => {}) => {\n setSearchTerm(value);\n if (!!value) {\n runDebouncedTriggerQuery(triggerQuery);\n } else {\n cancelDebouncedTriggerQuery();\n }\n },\n onBlur: () => {\n // setTimeout ensures that results are still clickable before close\n setTimeout(() => setShowInstantSearchResults(false), 300);\n },\n onFocus: () => {\n setShowInstantSearchResults(true);\n },\n innerClass: {\n input: options.inputClassName,\n },\n ...options,\n }),\n [\n searchTerm,\n handleKeyPress,\n options.placeholder,\n searchFields,\n setSearchTerm,\n runDebouncedTriggerQuery,\n cancelDebouncedTriggerQuery,\n ]\n );\n\n return reactiveDataSearchProps;\n};\n"]}
|