@usereactify/search 5.0.0-beta.1 → 5.0.0-beta.12
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 +72 -0
- package/dist/package.json +70 -0
- package/dist/src/components/Example/ExampleFilterList.d.ts +4 -0
- package/dist/src/components/Example/ExampleFilterList.js +21 -0
- package/dist/src/components/Example/ExampleFilterList.js.map +1 -0
- package/dist/src/components/Example/ExampleFilterRange.d.ts +4 -0
- package/dist/src/components/Example/ExampleFilterRange.js +22 -0
- package/dist/src/components/Example/ExampleFilterRange.js.map +1 -0
- package/dist/src/components/Example/ExampleFilterSlider.d.ts +4 -0
- package/dist/src/components/Example/ExampleFilterSlider.js +21 -0
- package/dist/src/components/Example/ExampleFilterSlider.js.map +1 -0
- package/dist/src/components/Example/ExampleFilterStack.d.ts +4 -0
- package/dist/src/components/Example/ExampleFilterStack.js +14 -0
- package/dist/src/components/Example/ExampleFilterStack.js.map +1 -0
- package/dist/src/components/Example/ExampleResultCardCallout.d.ts +4 -0
- package/dist/src/components/Example/ExampleResultCardCallout.js +22 -0
- package/dist/src/components/Example/ExampleResultCardCallout.js.map +1 -0
- package/dist/src/components/Example/ExampleResultCardProduct.d.ts +4 -0
- package/dist/src/components/Example/ExampleResultCardProduct.js +19 -0
- package/dist/src/components/Example/ExampleResultCardProduct.js.map +1 -0
- package/dist/src/components/Example/ExampleResultPaginationLoadMore.d.ts +4 -0
- package/dist/src/components/Example/ExampleResultPaginationLoadMore.js +12 -0
- package/dist/src/components/Example/ExampleResultPaginationLoadMore.js.map +1 -0
- package/dist/src/components/Example/ExampleResultPaginationNextPrev.d.ts +4 -0
- package/dist/src/components/Example/ExampleResultPaginationNextPrev.js +14 -0
- package/dist/src/components/Example/ExampleResultPaginationNextPrev.js.map +1 -0
- package/dist/src/components/Example/ExampleResultPaginationNumbered.d.ts +4 -0
- package/dist/src/components/Example/ExampleResultPaginationNumbered.js +27 -0
- package/dist/src/components/Example/ExampleResultPaginationNumbered.js.map +1 -0
- package/dist/src/components/Example/ExampleSortby.d.ts +4 -0
- package/dist/src/components/Example/ExampleSortby.js +13 -0
- package/dist/src/components/Example/ExampleSortby.js.map +1 -0
- package/dist/src/components/Example/index.d.ts +10 -0
- package/dist/src/components/Example/index.js +23 -0
- package/dist/src/components/Example/index.js.map +1 -0
- package/dist/src/components/Filter/Filter.d.ts +20 -0
- package/dist/src/components/Filter/Filter.js +78 -0
- package/dist/src/components/Filter/Filter.js.map +1 -0
- package/dist/src/components/Filter/FilterStack.d.ts +7 -0
- package/dist/src/components/Filter/FilterStack.js +17 -0
- package/dist/src/components/Filter/FilterStack.js.map +1 -0
- package/dist/src/components/Filter/index.d.ts +2 -0
- package/dist/src/components/Filter/index.js +15 -0
- package/dist/src/components/Filter/index.js.map +1 -0
- package/dist/src/components/ReactifySearchBase/ReactifySearchBase.d.ts +42 -0
- package/dist/src/components/ReactifySearchBase/ReactifySearchBase.js +131 -0
- package/dist/src/components/ReactifySearchBase/ReactifySearchBase.js.map +1 -0
- package/dist/src/components/ReactifySearchBase/index.d.ts +1 -0
- package/dist/src/components/ReactifySearchBase/index.js +14 -0
- package/dist/src/components/ReactifySearchBase/index.js.map +1 -0
- package/dist/src/components/Result/ResultCardCallout.d.ts +12 -0
- package/dist/src/components/Result/ResultCardCallout.js +45 -0
- package/dist/src/components/Result/ResultCardCallout.js.map +1 -0
- package/dist/src/components/Result/ResultCardProduct.d.ts +13 -0
- package/dist/src/components/Result/ResultCardProduct.js +50 -0
- package/dist/src/components/Result/ResultCardProduct.js.map +1 -0
- package/dist/src/components/Result/ResultPaginationLoadMore.d.ts +7 -0
- package/dist/src/components/Result/ResultPaginationLoadMore.js +17 -0
- package/dist/src/components/Result/ResultPaginationLoadMore.js.map +1 -0
- package/dist/src/components/Result/ResultPaginationNextPrev.d.ts +7 -0
- package/dist/src/components/Result/ResultPaginationNextPrev.js +17 -0
- package/dist/src/components/Result/ResultPaginationNextPrev.js.map +1 -0
- package/dist/src/components/Result/ResultPaginationNumbered.d.ts +7 -0
- package/dist/src/components/Result/ResultPaginationNumbered.js +20 -0
- package/dist/src/components/Result/ResultPaginationNumbered.js.map +1 -0
- package/dist/src/components/Result/ResultStack.d.ts +40 -0
- package/dist/src/components/Result/ResultStack.js +108 -0
- package/dist/src/components/Result/ResultStack.js.map +1 -0
- package/dist/src/components/Result/ResultStateProvider.d.ts +6 -0
- package/dist/src/components/Result/ResultStateProvider.js +14 -0
- package/dist/src/components/Result/ResultStateProvider.js.map +1 -0
- package/dist/src/components/Result/index.d.ts +7 -0
- package/dist/src/components/Result/index.js +20 -0
- package/dist/src/components/Result/index.js.map +1 -0
- package/dist/src/components/Search/SearchInput.d.ts +8 -0
- package/dist/src/components/Search/SearchInput.js +18 -0
- package/dist/src/components/Search/SearchInput.js.map +1 -0
- package/dist/src/components/Search/index.d.ts +1 -0
- package/dist/src/components/Search/index.js +14 -0
- package/dist/src/components/Search/index.js.map +1 -0
- package/dist/src/components/Sensor/SensorCollection.d.ts +2 -0
- package/dist/src/components/Sensor/SensorCollection.js +45 -0
- package/dist/src/components/Sensor/SensorCollection.js.map +1 -0
- package/dist/src/components/Sensor/SensorInventoryAvailable.d.ts +2 -0
- package/dist/src/components/Sensor/SensorInventoryAvailable.js +53 -0
- package/dist/src/components/Sensor/SensorInventoryAvailable.js.map +1 -0
- package/dist/src/components/Sensor/SensorPublished.d.ts +2 -0
- package/dist/src/components/Sensor/SensorPublished.js +17 -0
- package/dist/src/components/Sensor/SensorPublished.js.map +1 -0
- package/dist/src/components/Sensor/SensorSearch.d.ts +2 -0
- package/dist/src/components/Sensor/SensorSearch.js +83 -0
- package/dist/src/components/Sensor/SensorSearch.js.map +1 -0
- package/dist/src/components/Sensor/SensorSort.d.ts +2 -0
- package/dist/src/components/Sensor/SensorSort.js +187 -0
- package/dist/src/components/Sensor/SensorSort.js.map +1 -0
- package/dist/src/components/Sensor/SensorSortScore.d.ts +2 -0
- package/dist/src/components/Sensor/SensorSortScore.js +13 -0
- package/dist/src/components/Sensor/SensorSortScore.js.map +1 -0
- package/dist/src/components/Sensor/SensorStack.d.ts +3 -0
- package/dist/src/components/Sensor/SensorStack.js +32 -0
- package/dist/src/components/Sensor/SensorStack.js.map +1 -0
- package/dist/src/components/Sensor/index.d.ts +8 -0
- package/dist/src/components/Sensor/index.js +30 -0
- package/dist/src/components/Sensor/index.js.map +1 -0
- package/dist/src/components/Sortby/Sortby.d.ts +7 -0
- package/dist/src/components/Sortby/Sortby.js +17 -0
- package/dist/src/components/Sortby/Sortby.js.map +1 -0
- package/dist/src/components/Sortby/index.d.ts +1 -0
- package/dist/src/components/Sortby/index.js +14 -0
- package/dist/src/components/Sortby/index.js.map +1 -0
- package/dist/src/components/Utility/UtilityAuthenticatedReactiveBase.d.ts +2 -0
- package/dist/src/components/Utility/UtilityAuthenticatedReactiveBase.js +15 -0
- package/dist/src/components/Utility/UtilityAuthenticatedReactiveBase.js.map +1 -0
- package/dist/src/components/Utility/index.d.ts +1 -0
- package/dist/src/components/Utility/index.js +14 -0
- package/dist/src/components/Utility/index.js.map +1 -0
- package/dist/src/components/index.d.ts +8 -0
- package/dist/src/components/index.js +21 -0
- package/dist/src/components/index.js.map +1 -0
- package/dist/src/hooks/index.d.ts +15 -0
- package/dist/src/hooks/index.js +28 -0
- package/dist/src/hooks/index.js.map +1 -0
- package/dist/src/hooks/reactivesearch/index.d.ts +8 -0
- package/dist/src/hooks/reactivesearch/index.js +21 -0
- package/dist/src/hooks/reactivesearch/index.js.map +1 -0
- package/dist/src/hooks/reactivesearch/useReactiveBaseProps.d.ts +7 -0
- package/dist/src/hooks/reactivesearch/useReactiveBaseProps.js +45 -0
- package/dist/src/hooks/reactivesearch/useReactiveBaseProps.js.map +1 -0
- package/dist/src/hooks/reactivesearch/useReactiveDataSearchProps.d.ts +26 -0
- package/dist/src/hooks/reactivesearch/useReactiveDataSearchProps.js +71 -0
- package/dist/src/hooks/reactivesearch/useReactiveDataSearchProps.js.map +1 -0
- package/dist/src/hooks/reactivesearch/useReactiveFilterListProps.d.ts +73 -0
- package/dist/src/hooks/reactivesearch/useReactiveFilterListProps.js +23 -0
- package/dist/src/hooks/reactivesearch/useReactiveFilterListProps.js.map +1 -0
- package/dist/src/hooks/reactivesearch/useReactiveFilterRangeProps.d.ts +70 -0
- package/dist/src/hooks/reactivesearch/useReactiveFilterRangeProps.js +23 -0
- package/dist/src/hooks/reactivesearch/useReactiveFilterRangeProps.js.map +1 -0
- package/dist/src/hooks/reactivesearch/useReactiveFilterSharedProps.d.ts +67 -0
- package/dist/src/hooks/reactivesearch/useReactiveFilterSharedProps.js +107 -0
- package/dist/src/hooks/reactivesearch/useReactiveFilterSharedProps.js.map +1 -0
- package/dist/src/hooks/reactivesearch/useReactiveFilterSliderProps.d.ts +68 -0
- package/dist/src/hooks/reactivesearch/useReactiveFilterSliderProps.js +23 -0
- package/dist/src/hooks/reactivesearch/useReactiveFilterSliderProps.js.map +1 -0
- package/dist/src/hooks/reactivesearch/useReactiveReactProp.d.ts +3 -0
- package/dist/src/hooks/reactivesearch/useReactiveReactProp.js +26 -0
- package/dist/src/hooks/reactivesearch/useReactiveReactProp.js.map +1 -0
- package/dist/src/hooks/reactivesearch/useReactiveReactiveListProps.d.ts +5 -0
- package/dist/src/hooks/reactivesearch/useReactiveReactiveListProps.js +33 -0
- package/dist/src/hooks/reactivesearch/useReactiveReactiveListProps.js.map +1 -0
- package/dist/src/hooks/useAnalytics.d.ts +95 -0
- package/dist/src/hooks/useAnalytics.js +113 -0
- package/dist/src/hooks/useAnalytics.js.map +1 -0
- package/dist/src/hooks/useConfig.d.ts +4 -0
- package/dist/src/hooks/useConfig.js +83 -0
- package/dist/src/hooks/useConfig.js.map +1 -0
- package/dist/src/hooks/useCuration.d.ts +2 -0
- package/dist/src/hooks/useCuration.js +66 -0
- package/dist/src/hooks/useCuration.js.map +1 -0
- package/dist/src/hooks/useDebugger.d.ts +1 -0
- package/dist/src/hooks/useDebugger.js +15 -0
- package/dist/src/hooks/useDebugger.js.map +1 -0
- package/dist/src/hooks/useFilterCollapsedState.d.ts +8 -0
- package/dist/src/hooks/useFilterCollapsedState.js +28 -0
- package/dist/src/hooks/useFilterCollapsedState.js.map +1 -0
- package/dist/src/hooks/useFilterListProps.d.ts +12 -0
- package/dist/src/hooks/useFilterListProps.js +63 -0
- package/dist/src/hooks/useFilterListProps.js.map +1 -0
- package/dist/src/hooks/useFilterStack.d.ts +4 -0
- package/dist/src/hooks/useFilterStack.js +52 -0
- package/dist/src/hooks/useFilterStack.js.map +1 -0
- package/dist/src/hooks/useFilters.d.ts +4 -0
- package/dist/src/hooks/useFilters.js +27 -0
- package/dist/src/hooks/useFilters.js.map +1 -0
- package/dist/src/hooks/usePagination.d.ts +14 -0
- package/dist/src/hooks/usePagination.js +109 -0
- package/dist/src/hooks/usePagination.js.map +1 -0
- package/dist/src/hooks/usePaginationLoadMore.d.ts +15 -0
- package/dist/src/hooks/usePaginationLoadMore.js +38 -0
- package/dist/src/hooks/usePaginationLoadMore.js.map +1 -0
- package/dist/src/hooks/useProductPrice.d.ts +10 -0
- package/dist/src/hooks/useProductPrice.js +64 -0
- package/dist/src/hooks/useProductPrice.js.map +1 -0
- package/dist/src/hooks/useReactifySearchContext.d.ts +78 -0
- package/dist/src/hooks/useReactifySearchContext.js +11 -0
- package/dist/src/hooks/useReactifySearchContext.js.map +1 -0
- package/dist/src/hooks/useSearch.d.ts +8 -0
- package/dist/src/hooks/useSearch.js +50 -0
- package/dist/src/hooks/useSearch.js.map +1 -0
- package/dist/src/hooks/useSortby.d.ts +6 -0
- package/dist/src/hooks/useSortby.js +58 -0
- package/dist/src/hooks/useSortby.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.js +61 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/types/config.d.ts +26 -0
- package/dist/src/types/config.js +3 -0
- package/dist/src/types/config.js.map +1 -0
- package/dist/src/types/elastic.d.ts +209 -0
- package/dist/src/types/elastic.js +19 -0
- package/dist/src/types/elastic.js.map +1 -0
- package/dist/src/types/firestore.d.ts +280 -0
- package/dist/src/types/firestore.js +19 -0
- package/dist/src/types/firestore.js.map +1 -0
- package/dist/src/types/graphql.d.ts +26545 -0
- package/dist/src/types/graphql.js +4688 -0
- package/dist/src/types/graphql.js.map +1 -0
- package/dist/src/types/index.d.ts +3 -0
- package/dist/src/types/index.js +16 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/types/reactivesearch.d.ts +73 -0
- package/dist/src/types/reactivesearch.js +3 -0
- package/dist/src/types/reactivesearch.js.map +1 -0
- package/dist/src/types/shopify.d.ts +21 -0
- package/dist/src/types/shopify.js +28 -0
- package/dist/src/types/shopify.js.map +1 -0
- package/dist/src/utility/debug.d.ts +12 -0
- package/dist/src/utility/debug.js +43 -0
- package/dist/src/utility/debug.js.map +1 -0
- package/dist/src/utility/index.d.ts +1 -0
- package/dist/src/utility/index.js +14 -0
- package/dist/src/utility/index.js.map +1 -0
- package/package.json +8 -3
|
@@ -0,0 +1,33 @@
|
|
|
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.useReactiveReactiveListProps = void 0;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const hooks_1 = require("../../hooks");
|
|
9
|
+
const useReactiveReactProp_1 = require("./useReactiveReactProp");
|
|
10
|
+
const useReactiveReactiveListProps = (options) => {
|
|
11
|
+
const { filterStack } = (0, hooks_1.useFilterStack)();
|
|
12
|
+
const reactiveReactProp = (0, useReactiveReactProp_1.useReactiveReactProp)();
|
|
13
|
+
const size = react_1.default.useMemo(() => {
|
|
14
|
+
var _a, _b;
|
|
15
|
+
return (_b = (_a = options.pageSize) !== null && _a !== void 0 ? _a : filterStack === null || filterStack === void 0 ? void 0 : filterStack.pageSize) !== null && _b !== void 0 ? _b : 20;
|
|
16
|
+
}, [options.pageSize, filterStack]);
|
|
17
|
+
const reactiveReactiveListProps = react_1.default.useMemo(() => ({
|
|
18
|
+
size,
|
|
19
|
+
URLParams: true,
|
|
20
|
+
showLoader: false,
|
|
21
|
+
dataField: "title",
|
|
22
|
+
showResultStats: false,
|
|
23
|
+
react: reactiveReactProp,
|
|
24
|
+
componentId: "page",
|
|
25
|
+
scrollOnChange: false,
|
|
26
|
+
pagination: (filterStack === null || filterStack === void 0 ? void 0 : filterStack.paginationType) !== "infinite_scroll",
|
|
27
|
+
infiniteScroll: (filterStack === null || filterStack === void 0 ? void 0 : filterStack.paginationType) === "infinite_scroll",
|
|
28
|
+
renderNoResults: () => null, // always use only render, otherwise both are shown
|
|
29
|
+
}), [filterStack, reactiveReactProp, options.pageSize]);
|
|
30
|
+
return reactiveReactiveListProps;
|
|
31
|
+
};
|
|
32
|
+
exports.useReactiveReactiveListProps = useReactiveReactiveListProps;
|
|
33
|
+
//# sourceMappingURL=useReactiveReactiveListProps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useReactiveReactiveListProps.js","sourceRoot":"","sources":["../../../../src/hooks/reactivesearch/useReactiveReactiveListProps.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,uCAA6C;AAC7C,iEAA8D;AAEvD,MAAM,4BAA4B,GAAG,CAAC,OAE5C,EAA6C,EAAE;IAC9C,MAAM,EAAE,WAAW,EAAE,GAAG,IAAA,sBAAc,GAAE,CAAC;IACzC,MAAM,iBAAiB,GAAG,IAAA,2CAAoB,GAAE,CAAC;IAEjD,MAAM,IAAI,GAAG,eAAK,CAAC,OAAO,CAAC,GAAG,EAAE;;QAC9B,OAAO,MAAA,MAAA,OAAO,CAAC,QAAQ,mCAAI,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,QAAQ,mCAAI,EAAE,CAAC;IACzD,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;IAEpC,MAAM,yBAAyB,GAAG,eAAK,CAAC,OAAO,CAC7C,GAAG,EAAE,CAAC,CAAC;QACL,IAAI;QACJ,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,OAAO;QAClB,eAAe,EAAE,KAAK;QACtB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,MAAM;QACnB,cAAc,EAAE,KAAK;QACrB,UAAU,EAAE,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,cAAc,MAAK,iBAAiB;QAC7D,cAAc,EAAE,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,cAAc,MAAK,iBAAiB;QACjE,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,mDAAmD;KACjF,CAAC,EACF,CAAC,WAAW,EAAE,iBAAiB,EAAE,OAAO,CAAC,QAAQ,CAAC,CACnD,CAAC;IAEF,OAAO,yBAAyB,CAAC;AACnC,CAAC,CAAC;AA5BW,QAAA,4BAA4B,gCA4BvC","sourcesContent":["import React from \"react\";\nimport ReactiveList from \"@appbaseio/reactivesearch/lib/components/result/ReactiveList\";\n\nimport { useFilterStack } from \"../../hooks\";\nimport { useReactiveReactProp } from \"./useReactiveReactProp\";\n\nexport const useReactiveReactiveListProps = (options: {\n pageSize?: number;\n}): React.ComponentProps<typeof ReactiveList> => {\n const { filterStack } = useFilterStack();\n const reactiveReactProp = useReactiveReactProp();\n\n const size = React.useMemo(() => {\n return options.pageSize ?? filterStack?.pageSize ?? 20;\n }, [options.pageSize, filterStack]);\n\n const reactiveReactiveListProps = React.useMemo(\n () => ({\n size,\n URLParams: true,\n showLoader: false,\n dataField: \"title\",\n showResultStats: false,\n react: reactiveReactProp,\n componentId: \"page\", // this sets ?page= in the URL\n scrollOnChange: false, // @todo make this better, it's really janky when enabled\n pagination: filterStack?.paginationType !== \"infinite_scroll\",\n infiniteScroll: filterStack?.paginationType === \"infinite_scroll\",\n renderNoResults: () => null, // always use only render, otherwise both are shown\n }),\n [filterStack, reactiveReactProp, options.pageSize]\n );\n\n return reactiveReactiveListProps;\n};\n"]}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
export declare const useAnalytics: () => {
|
|
2
|
+
track: (event: TrackEvent) => Promise<import("axios").AxiosResponse<any, any> | undefined>;
|
|
3
|
+
};
|
|
4
|
+
export declare type TrackEvent = TrackEvent.SearchEvent | TrackEvent.ZeroResultsEvent | TrackEvent.ViewProductEvent | TrackEvent.ClickProductEvent | TrackEvent.ViewPromotionEvent | TrackEvent.ClickPromotionEvent | TrackEvent.PaginationChangeEvent | TrackEvent.SortChangeEvent | TrackEvent.FilterChangeEvent;
|
|
5
|
+
export declare namespace TrackEvent {
|
|
6
|
+
interface SearchEvent {
|
|
7
|
+
eventName: "search";
|
|
8
|
+
payload: SearchEvent.Payload;
|
|
9
|
+
}
|
|
10
|
+
namespace SearchEvent {
|
|
11
|
+
interface Payload {
|
|
12
|
+
searchTerm: string;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
interface ZeroResultsEvent {
|
|
16
|
+
eventName: "zeroResults";
|
|
17
|
+
payload: ZeroResultsEvent.Payload;
|
|
18
|
+
}
|
|
19
|
+
namespace ZeroResultsEvent {
|
|
20
|
+
interface Payload {
|
|
21
|
+
searchTerm: string;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
interface ViewProductEvent {
|
|
25
|
+
eventName: "viewProduct";
|
|
26
|
+
payload: ViewProductEvent.Payload;
|
|
27
|
+
}
|
|
28
|
+
namespace ViewProductEvent {
|
|
29
|
+
interface Payload {
|
|
30
|
+
elasticProduct: ElasticProduct;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
interface ClickProductEvent {
|
|
34
|
+
eventName: "clickProduct";
|
|
35
|
+
payload: ClickProductEvent.Payload;
|
|
36
|
+
}
|
|
37
|
+
namespace ClickProductEvent {
|
|
38
|
+
interface Payload {
|
|
39
|
+
elasticProduct: ElasticProduct;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
interface ViewPromotionEvent {
|
|
43
|
+
eventName: "viewPromotion";
|
|
44
|
+
payload: ViewPromotionEvent.Payload;
|
|
45
|
+
}
|
|
46
|
+
namespace ViewPromotionEvent {
|
|
47
|
+
interface Payload {
|
|
48
|
+
link: string;
|
|
49
|
+
title: string;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
interface ClickPromotionEvent {
|
|
53
|
+
eventName: "clickPromotion";
|
|
54
|
+
payload: ClickPromotionEvent.Payload;
|
|
55
|
+
}
|
|
56
|
+
namespace ClickPromotionEvent {
|
|
57
|
+
interface Payload {
|
|
58
|
+
link: string;
|
|
59
|
+
title: string;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
interface PaginationChangeEvent {
|
|
63
|
+
eventName: "paginationChange";
|
|
64
|
+
payload: PaginationChangeEvent.Payload;
|
|
65
|
+
}
|
|
66
|
+
namespace PaginationChangeEvent {
|
|
67
|
+
interface Payload {
|
|
68
|
+
page: number;
|
|
69
|
+
source: "search" | "collection";
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
interface SortChangeEvent {
|
|
73
|
+
eventName: "sortChange";
|
|
74
|
+
payload: SortChangeEvent.Payload;
|
|
75
|
+
}
|
|
76
|
+
namespace SortChangeEvent {
|
|
77
|
+
interface Payload {
|
|
78
|
+
type: string;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
interface FilterChangeEvent {
|
|
82
|
+
eventName: "filterChange";
|
|
83
|
+
payload: FilterChangeEvent.Payload;
|
|
84
|
+
}
|
|
85
|
+
namespace FilterChangeEvent {
|
|
86
|
+
interface Payload {
|
|
87
|
+
name: string;
|
|
88
|
+
value: string;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
interface ElasticProduct {
|
|
92
|
+
id: number;
|
|
93
|
+
title: string;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
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.useAnalytics = void 0;
|
|
16
|
+
const axios_1 = __importDefault(require("axios"));
|
|
17
|
+
const hooks_1 = require("../hooks");
|
|
18
|
+
const utility_1 = require("../utility");
|
|
19
|
+
const useAnalytics = () => {
|
|
20
|
+
const { options } = (0, hooks_1.useReactifySearchContext)();
|
|
21
|
+
const url = "https://analytics.search.reactify.app/record/";
|
|
22
|
+
const track = (event) => __awaiter(void 0, void 0, void 0, function* () {
|
|
23
|
+
if (!options.shopifyPermanentDomain) {
|
|
24
|
+
console.warn(new Error('Unable to send tracking event, missing value for "shopifyPermanentDomain".'));
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
utility_1.debug.log("useAnalytics", "track", event);
|
|
28
|
+
const events = getTrackEvents(event);
|
|
29
|
+
return axios_1.default.post(url, { events }, { headers: { "X-Reactify-Tenant": options.shopifyPermanentDomain } });
|
|
30
|
+
});
|
|
31
|
+
return { track };
|
|
32
|
+
};
|
|
33
|
+
exports.useAnalytics = useAnalytics;
|
|
34
|
+
function getTrackEvents(event) {
|
|
35
|
+
const { eventName } = event;
|
|
36
|
+
let events = [];
|
|
37
|
+
switch (eventName) {
|
|
38
|
+
case "search":
|
|
39
|
+
events = [
|
|
40
|
+
{
|
|
41
|
+
eventName,
|
|
42
|
+
payload: event.payload,
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
break;
|
|
46
|
+
case "zeroResults":
|
|
47
|
+
events = [
|
|
48
|
+
{
|
|
49
|
+
eventName,
|
|
50
|
+
payload: event.payload,
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
break;
|
|
54
|
+
case "viewProduct":
|
|
55
|
+
events = [
|
|
56
|
+
{
|
|
57
|
+
eventName,
|
|
58
|
+
payload: event.payload,
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
break;
|
|
62
|
+
case "clickProduct":
|
|
63
|
+
events = [
|
|
64
|
+
{
|
|
65
|
+
eventName,
|
|
66
|
+
payload: event.payload,
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
break;
|
|
70
|
+
case "viewPromotion":
|
|
71
|
+
events = [
|
|
72
|
+
{
|
|
73
|
+
eventName,
|
|
74
|
+
payload: event.payload,
|
|
75
|
+
},
|
|
76
|
+
];
|
|
77
|
+
break;
|
|
78
|
+
case "clickPromotion":
|
|
79
|
+
events = [
|
|
80
|
+
{
|
|
81
|
+
eventName,
|
|
82
|
+
payload: event.payload,
|
|
83
|
+
},
|
|
84
|
+
];
|
|
85
|
+
break;
|
|
86
|
+
case "paginationChange":
|
|
87
|
+
events = [
|
|
88
|
+
{
|
|
89
|
+
eventName,
|
|
90
|
+
payload: event.payload,
|
|
91
|
+
},
|
|
92
|
+
];
|
|
93
|
+
break;
|
|
94
|
+
case "sortChange":
|
|
95
|
+
events = [
|
|
96
|
+
{
|
|
97
|
+
eventName,
|
|
98
|
+
payload: event.payload,
|
|
99
|
+
},
|
|
100
|
+
];
|
|
101
|
+
break;
|
|
102
|
+
case "filterChange":
|
|
103
|
+
events = [
|
|
104
|
+
{
|
|
105
|
+
eventName,
|
|
106
|
+
payload: event.payload,
|
|
107
|
+
},
|
|
108
|
+
];
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
return events;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=useAnalytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAnalytics.js","sourceRoot":"","sources":["../../../src/hooks/useAnalytics.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kDAA0B;AAE1B,oCAAoD;AACpD,wCAAmC;AAE5B,MAAM,YAAY,GAAG,GAAG,EAAE;IAC/B,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,gCAAwB,GAAE,CAAC;IAC/C,MAAM,GAAG,GAAG,+CAA+C,CAAC;IAC5D,MAAM,KAAK,GAAG,CAAO,KAAiB,EAAE,EAAE;QACxC,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE;YACnC,OAAO,CAAC,IAAI,CACV,IAAI,KAAK,CACP,4EAA4E,CAC7E,CACF,CAAC;YAEF,OAAO;SACR;QAED,eAAK,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAE1C,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,eAAK,CAAC,IAAI,CACf,GAAG,EACH,EAAE,MAAM,EAAE,EACV,EAAE,OAAO,EAAE,EAAE,mBAAmB,EAAE,OAAO,CAAC,sBAAsB,EAAE,EAAE,CACrE,CAAC;IACJ,CAAC,CAAA,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC,CAAC;AAzBW,QAAA,YAAY,gBAyBvB;AAEF,SAAS,cAAc,CAAC,KAAiB;IACvC,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC5B,IAAI,MAAM,GAAiB,EAAE,CAAC;IAE9B,QAAQ,SAAS,EAAE;QACjB,KAAK,QAAQ;YACX,MAAM,GAAG;gBACP;oBACE,SAAS;oBACT,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB;aACF,CAAC;YAEF,MAAM;QAER,KAAK,aAAa;YAChB,MAAM,GAAG;gBACP;oBACE,SAAS;oBACT,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB;aACF,CAAC;YAEF,MAAM;QAER,KAAK,aAAa;YAChB,MAAM,GAAG;gBACP;oBACE,SAAS;oBACT,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB;aACF,CAAC;YAEF,MAAM;QAER,KAAK,cAAc;YACjB,MAAM,GAAG;gBACP;oBACE,SAAS;oBACT,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB;aACF,CAAC;YAEF,MAAM;QAER,KAAK,eAAe;YAClB,MAAM,GAAG;gBACP;oBACE,SAAS;oBACT,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB;aACF,CAAC;YAEF,MAAM;QAER,KAAK,gBAAgB;YACnB,MAAM,GAAG;gBACP;oBACE,SAAS;oBACT,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB;aACF,CAAC;YAEF,MAAM;QAER,KAAK,kBAAkB;YACrB,MAAM,GAAG;gBACP;oBACE,SAAS;oBACT,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB;aACF,CAAC;YAEF,MAAM;QAER,KAAK,YAAY;YACf,MAAM,GAAG;gBACP;oBACE,SAAS;oBACT,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB;aACF,CAAC;YAEF,MAAM;QAER,KAAK,cAAc;YACjB,MAAM,GAAG;gBACP;oBACE,SAAS;oBACT,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB;aACF,CAAC;YAEF,MAAM;KACT;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import axios from \"axios\";\n\nimport { useReactifySearchContext } from \"../hooks\";\nimport { debug } from \"../utility\";\n\nexport const useAnalytics = () => {\n const { options } = useReactifySearchContext();\n const url = \"https://analytics.search.reactify.app/record/\";\n const track = async (event: TrackEvent) => {\n if (!options.shopifyPermanentDomain) {\n console.warn(\n new Error(\n 'Unable to send tracking event, missing value for \"shopifyPermanentDomain\".'\n )\n );\n\n return;\n }\n\n debug.log(\"useAnalytics\", \"track\", event);\n\n const events = getTrackEvents(event);\n return axios.post(\n url,\n { events },\n { headers: { \"X-Reactify-Tenant\": options.shopifyPermanentDomain } }\n );\n };\n\n return { track };\n};\n\nfunction getTrackEvents(event: TrackEvent): TrackEvent[] {\n const { eventName } = event;\n let events: TrackEvent[] = [];\n\n switch (eventName) {\n case \"search\":\n events = [\n {\n eventName,\n payload: event.payload,\n },\n ];\n\n break;\n\n case \"zeroResults\":\n events = [\n {\n eventName,\n payload: event.payload,\n },\n ];\n\n break;\n\n case \"viewProduct\":\n events = [\n {\n eventName,\n payload: event.payload,\n },\n ];\n\n break;\n\n case \"clickProduct\":\n events = [\n {\n eventName,\n payload: event.payload,\n },\n ];\n\n break;\n\n case \"viewPromotion\":\n events = [\n {\n eventName,\n payload: event.payload,\n },\n ];\n\n break;\n\n case \"clickPromotion\":\n events = [\n {\n eventName,\n payload: event.payload,\n },\n ];\n\n break;\n\n case \"paginationChange\":\n events = [\n {\n eventName,\n payload: event.payload,\n },\n ];\n\n break;\n\n case \"sortChange\":\n events = [\n {\n eventName,\n payload: event.payload,\n },\n ];\n\n break;\n\n case \"filterChange\":\n events = [\n {\n eventName,\n payload: event.payload,\n },\n ];\n\n break;\n }\n\n return events;\n}\n\nexport type TrackEvent =\n | TrackEvent.SearchEvent\n | TrackEvent.ZeroResultsEvent\n | TrackEvent.ViewProductEvent\n | TrackEvent.ClickProductEvent\n | TrackEvent.ViewPromotionEvent\n | TrackEvent.ClickPromotionEvent\n | TrackEvent.PaginationChangeEvent\n | TrackEvent.SortChangeEvent\n | TrackEvent.FilterChangeEvent;\n\nexport namespace TrackEvent {\n export interface SearchEvent {\n eventName: \"search\";\n payload: SearchEvent.Payload;\n }\n\n export namespace SearchEvent {\n export interface Payload {\n searchTerm: string;\n }\n }\n\n export interface ZeroResultsEvent {\n eventName: \"zeroResults\";\n payload: ZeroResultsEvent.Payload;\n }\n\n export namespace ZeroResultsEvent {\n export interface Payload {\n searchTerm: string;\n }\n }\n\n export interface ViewProductEvent {\n eventName: \"viewProduct\";\n payload: ViewProductEvent.Payload;\n }\n\n export namespace ViewProductEvent {\n export interface Payload {\n elasticProduct: ElasticProduct;\n }\n }\n\n export interface ClickProductEvent {\n eventName: \"clickProduct\";\n payload: ClickProductEvent.Payload;\n }\n\n export namespace ClickProductEvent {\n export interface Payload {\n elasticProduct: ElasticProduct;\n }\n }\n\n export interface ViewPromotionEvent {\n eventName: \"viewPromotion\";\n payload: ViewPromotionEvent.Payload;\n }\n\n export namespace ViewPromotionEvent {\n export interface Payload {\n link: string;\n title: string;\n }\n }\n\n export interface ClickPromotionEvent {\n eventName: \"clickPromotion\";\n payload: ClickPromotionEvent.Payload;\n }\n\n export namespace ClickPromotionEvent {\n export interface Payload {\n link: string;\n title: string;\n }\n }\n\n export interface PaginationChangeEvent {\n eventName: \"paginationChange\";\n payload: PaginationChangeEvent.Payload;\n }\n\n export namespace PaginationChangeEvent {\n export interface Payload {\n page: number;\n source: \"search\" | \"collection\";\n }\n }\n\n export interface SortChangeEvent {\n eventName: \"sortChange\";\n payload: SortChangeEvent.Payload;\n }\n\n export namespace SortChangeEvent {\n export interface Payload {\n type: string;\n }\n }\n\n export interface FilterChangeEvent {\n eventName: \"filterChange\";\n payload: FilterChangeEvent.Payload;\n }\n\n export namespace FilterChangeEvent {\n export interface Payload {\n name: string;\n value: string;\n }\n }\n\n export interface ElasticProduct {\n id: number;\n title: string;\n }\n}\n"]}
|
|
@@ -0,0 +1,83 @@
|
|
|
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.useConfig = void 0;
|
|
16
|
+
const react_1 = __importDefault(require("react"));
|
|
17
|
+
const utility_1 = require("../utility");
|
|
18
|
+
// 5 minute cache expiry
|
|
19
|
+
const CACHE_EXPIRY = 5 * 60 * 1000;
|
|
20
|
+
const useConfig = (shopifyPermanentDomain, configId) => {
|
|
21
|
+
// synchronously returns cached and non-expired config from session storage
|
|
22
|
+
const cachedConfig = react_1.default.useMemo(() => {
|
|
23
|
+
var _a;
|
|
24
|
+
if (typeof window === "undefined") {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
utility_1.debug.log("useConfig", "checking config cache");
|
|
28
|
+
// skip checking cache if url search param "nocache" is set
|
|
29
|
+
const skipCache = new URLSearchParams(window.location.href.split("?")[1]).get("nocache") !==
|
|
30
|
+
null;
|
|
31
|
+
if (skipCache) {
|
|
32
|
+
utility_1.debug.log("config cache is disabled");
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const sessionConfig = JSON.parse((_a = window.sessionStorage.getItem("reactify-search:config")) !== null && _a !== void 0 ? _a : "null");
|
|
36
|
+
if (sessionConfig) {
|
|
37
|
+
const sessionConfigTtl = sessionConfig.expiresAt - Date.now();
|
|
38
|
+
if (sessionConfigTtl > 0) {
|
|
39
|
+
utility_1.debug.log("useConfig", `config cache valid, expires in ${(sessionConfigTtl / 1000).toFixed()} seconds`);
|
|
40
|
+
return sessionConfig.config;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
utility_1.debug.log("useConfig", `config cache invalid, expired ${((sessionConfigTtl * -1) /
|
|
44
|
+
1000).toFixed()} seconds ago`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return;
|
|
48
|
+
}, []);
|
|
49
|
+
const [config, setConfig] = react_1.default.useState(cachedConfig);
|
|
50
|
+
react_1.default.useEffect(() => {
|
|
51
|
+
if (config) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
55
|
+
utility_1.debug.log("useConfig", "loading fresh config");
|
|
56
|
+
const searchParams = new URLSearchParams();
|
|
57
|
+
searchParams.set("shop", shopifyPermanentDomain);
|
|
58
|
+
if (configId) {
|
|
59
|
+
searchParams.set("id", configId);
|
|
60
|
+
}
|
|
61
|
+
const skipCache = new URLSearchParams(window.location.href.split("?")[1]).get("nocache") !== null;
|
|
62
|
+
if (skipCache) {
|
|
63
|
+
searchParams.set("nocache", "true");
|
|
64
|
+
}
|
|
65
|
+
const json = yield fetch(`https://config.search.reactify.app/?${searchParams.toString()}`).then((response) => response.json());
|
|
66
|
+
setConfig(json.body);
|
|
67
|
+
utility_1.debug.log("useConfig", "loaded fresh config");
|
|
68
|
+
window.sessionStorage.setItem("reactify-search:config", JSON.stringify({
|
|
69
|
+
expiresAt: new Date().getTime() + CACHE_EXPIRY,
|
|
70
|
+
noCache: skipCache,
|
|
71
|
+
config: json.body,
|
|
72
|
+
}));
|
|
73
|
+
}))();
|
|
74
|
+
}, [shopifyPermanentDomain, configId]);
|
|
75
|
+
react_1.default.useEffect(() => {
|
|
76
|
+
utility_1.debug.log("useConfig", "config", config);
|
|
77
|
+
}, [config]);
|
|
78
|
+
return {
|
|
79
|
+
config,
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
exports.useConfig = useConfig;
|
|
83
|
+
//# sourceMappingURL=useConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useConfig.js","sourceRoot":"","sources":["../../../src/hooks/useConfig.ts"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\n\nimport { Config } from \"../types/config\";\nimport { debug } from \"../utility\";\n\n// 5 minute cache expiry\nconst CACHE_EXPIRY = 5 * 60 * 1000;\n\nexport const useConfig = (\n shopifyPermanentDomain: string,\n configId?: string\n): {\n config: Config | undefined;\n} => {\n // synchronously returns cached and non-expired config from session storage\n const cachedConfig = React.useMemo(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n debug.log(\"useConfig\", \"checking config cache\");\n\n // skip checking cache if url search param \"nocache\" is set\n const skipCache =\n new URLSearchParams(window.location.href.split(\"?\")[1]).get(\"nocache\") !==\n null;\n if (skipCache) {\n debug.log(\"config cache is disabled\");\n\n return;\n }\n\n const sessionConfig: {\n expiresAt: number;\n config: Config;\n } | null = JSON.parse(\n window.sessionStorage.getItem(\"reactify-search:config\") ?? \"null\"\n );\n\n if (sessionConfig) {\n const sessionConfigTtl = sessionConfig.expiresAt - Date.now();\n if (sessionConfigTtl > 0) {\n debug.log(\n \"useConfig\",\n `config cache valid, expires in ${(\n sessionConfigTtl / 1000\n ).toFixed()} seconds`\n );\n\n return sessionConfig.config;\n } else {\n debug.log(\n \"useConfig\",\n `config cache invalid, expired ${(\n (sessionConfigTtl * -1) /\n 1000\n ).toFixed()} seconds ago`\n );\n }\n }\n\n return;\n }, []);\n\n const [config, setConfig] = React.useState<Config | undefined>(cachedConfig);\n\n React.useEffect(() => {\n if (config) {\n return;\n }\n\n (async () => {\n debug.log(\"useConfig\", \"loading fresh config\");\n const searchParams = new URLSearchParams();\n searchParams.set(\"shop\", shopifyPermanentDomain);\n\n if (configId) {\n searchParams.set(\"id\", configId);\n }\n\n const skipCache =\n new URLSearchParams(window.location.href.split(\"?\")[1]).get(\n \"nocache\"\n ) !== null;\n\n if (skipCache) {\n searchParams.set(\"nocache\", \"true\");\n }\n\n const json = await fetch(\n `https://config.search.reactify.app/?${searchParams.toString()}`\n ).then((response) => response.json());\n\n setConfig(json.body);\n\n debug.log(\"useConfig\", \"loaded fresh config\");\n\n window.sessionStorage.setItem(\n \"reactify-search:config\",\n JSON.stringify({\n expiresAt: new Date().getTime() + CACHE_EXPIRY,\n noCache: skipCache,\n config: json.body,\n })\n );\n })();\n }, [shopifyPermanentDomain, configId]);\n\n React.useEffect(() => {\n debug.log(\"useConfig\", \"config\", config);\n }, [config]);\n\n return {\n config,\n };\n};\n"]}
|
|
@@ -0,0 +1,66 @@
|
|
|
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.useCuration = void 0;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const hooks_1 = require("../hooks");
|
|
9
|
+
const utility_1 = require("../utility");
|
|
10
|
+
const useCuration = () => {
|
|
11
|
+
const { options, config } = (0, hooks_1.useReactifySearchContext)();
|
|
12
|
+
const { searchQuery } = (0, hooks_1.useSearch)();
|
|
13
|
+
const curation = react_1.default.useMemo(() => {
|
|
14
|
+
const handleOrSearchTerm = options.mode === "collection"
|
|
15
|
+
? options.collection
|
|
16
|
+
? options.collection.handle
|
|
17
|
+
: searchQuery
|
|
18
|
+
: "";
|
|
19
|
+
const normalisedHandleOrSearchTerm = handleOrSearchTerm
|
|
20
|
+
.toLowerCase()
|
|
21
|
+
.trim();
|
|
22
|
+
const globalCuration = config.curations.find((curation) => curation.id === "global" && curation.type === options.mode);
|
|
23
|
+
const curation = config.curations.find((curation) => {
|
|
24
|
+
var _a, _b;
|
|
25
|
+
const normalisedSearchTerm = (_a = curation.searchTerm) === null || _a === void 0 ? void 0 : _a.toLowerCase().trim();
|
|
26
|
+
const normalisedCollectionHandle = (_b = curation.collectionHandle) === null || _b === void 0 ? void 0 : _b.toLowerCase().trim();
|
|
27
|
+
if ("search" === options.mode) {
|
|
28
|
+
return ("search" === curation.type &&
|
|
29
|
+
normalisedHandleOrSearchTerm === normalisedSearchTerm);
|
|
30
|
+
}
|
|
31
|
+
if ("collection" === options.mode) {
|
|
32
|
+
return ("collection" === curation.type &&
|
|
33
|
+
normalisedHandleOrSearchTerm === normalisedCollectionHandle);
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
});
|
|
37
|
+
const addGlobalBoosting = (curation) => {
|
|
38
|
+
const curationIsCollection = curation.type === "collection";
|
|
39
|
+
if (!curationIsCollection) {
|
|
40
|
+
return curation;
|
|
41
|
+
}
|
|
42
|
+
const curationHasRules = !!curation.boosting.groupings.length ||
|
|
43
|
+
!!curation.boosting.sortings.length;
|
|
44
|
+
if (curationHasRules || !globalCuration) {
|
|
45
|
+
return curation;
|
|
46
|
+
}
|
|
47
|
+
const curationWithGlobalBoosting = Object.assign(Object.assign({}, curation), { boosting: globalCuration.boosting });
|
|
48
|
+
return curationWithGlobalBoosting;
|
|
49
|
+
};
|
|
50
|
+
return curation
|
|
51
|
+
? addGlobalBoosting(curation)
|
|
52
|
+
: globalCuration
|
|
53
|
+
? globalCuration
|
|
54
|
+
: undefined;
|
|
55
|
+
}, [
|
|
56
|
+
config,
|
|
57
|
+
options.mode === "collection" ? options.collection : undefined,
|
|
58
|
+
searchQuery,
|
|
59
|
+
]);
|
|
60
|
+
react_1.default.useEffect(() => {
|
|
61
|
+
utility_1.debug.log("useCuration", "curation", curation);
|
|
62
|
+
}, [curation]);
|
|
63
|
+
return curation;
|
|
64
|
+
};
|
|
65
|
+
exports.useCuration = useCuration;
|
|
66
|
+
//# sourceMappingURL=useCuration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCuration.js","sourceRoot":"","sources":["../../../src/hooks/useCuration.ts"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\n\nimport { ConfigCuration } from \"../types\";\nimport { useReactifySearchContext, useSearch } from \"../hooks\";\nimport { debug } from \"../utility\";\n\nexport const useCuration = (): ConfigCuration | undefined => {\n const { options, config } = useReactifySearchContext();\n const { searchQuery } = useSearch();\n\n const curation = React.useMemo(() => {\n const handleOrSearchTerm =\n options.mode === \"collection\"\n ? options.collection\n ? options.collection.handle\n : searchQuery\n : \"\";\n\n const normalisedHandleOrSearchTerm = handleOrSearchTerm\n .toLowerCase()\n .trim();\n\n const globalCuration = config.curations.find(\n (curation) => curation.id === \"global\" && curation.type === options.mode\n );\n\n const curation = config.curations.find((curation) => {\n const normalisedSearchTerm = curation.searchTerm?.toLowerCase().trim();\n const normalisedCollectionHandle = curation.collectionHandle\n ?.toLowerCase()\n .trim();\n\n if (\"search\" === options.mode) {\n return (\n \"search\" === curation.type &&\n normalisedHandleOrSearchTerm === normalisedSearchTerm\n );\n }\n\n if (\"collection\" === options.mode) {\n return (\n \"collection\" === curation.type &&\n normalisedHandleOrSearchTerm === normalisedCollectionHandle\n );\n }\n\n return false;\n });\n\n const addGlobalBoosting = (curation: ConfigCuration) => {\n const curationIsCollection = curation.type === \"collection\";\n if (!curationIsCollection) {\n return curation;\n }\n\n const curationHasRules =\n !!curation.boosting.groupings.length ||\n !!curation.boosting.sortings.length;\n\n if (curationHasRules || !globalCuration) {\n return curation;\n }\n\n const curationWithGlobalBoosting = {\n ...curation,\n boosting: globalCuration.boosting,\n } as ConfigCuration;\n\n return curationWithGlobalBoosting;\n };\n\n return curation\n ? addGlobalBoosting(curation)\n : globalCuration\n ? globalCuration\n : undefined;\n }, [\n config,\n options.mode === \"collection\" ? options.collection : undefined,\n searchQuery,\n ]);\n\n React.useEffect(() => {\n debug.log(\"useCuration\", \"curation\", curation);\n }, [curation]);\n\n return curation;\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useDebugger: (namespace: string, message: string, value: unknown) => void;
|
|
@@ -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.useDebugger = void 0;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const utility_1 = require("../utility");
|
|
9
|
+
const useDebugger = (namespace, message, value) => {
|
|
10
|
+
react_1.default.useEffect(() => {
|
|
11
|
+
utility_1.debug.log(namespace, message, value);
|
|
12
|
+
}, [value]);
|
|
13
|
+
};
|
|
14
|
+
exports.useDebugger = useDebugger;
|
|
15
|
+
//# sourceMappingURL=useDebugger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDebugger.js","sourceRoot":"","sources":["../../../src/hooks/useDebugger.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAE1B,wCAAmC;AAE5B,MAAM,WAAW,GAAG,CACzB,SAAiB,EACjB,OAAe,EACf,KAAc,EACd,EAAE;IACF,eAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,eAAK,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACd,CAAC,CAAC;AARW,QAAA,WAAW,eAQtB","sourcesContent":["import React from \"react\";\n\nimport { debug } from \"../utility\";\n\nexport const useDebugger = (\n namespace: string,\n message: string,\n value: unknown\n) => {\n React.useEffect(() => {\n debug.log(namespace, message, value);\n }, [value]);\n};\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ConfigFilterOption } from "../types/config";
|
|
2
|
+
export declare const useFilterCollapsedState: (filter: ConfigFilterOption) => {
|
|
3
|
+
collapsed: boolean;
|
|
4
|
+
shouldRender: boolean;
|
|
5
|
+
collapsedShow: () => void;
|
|
6
|
+
collapsedHide: () => void;
|
|
7
|
+
collapsedToggle: () => void;
|
|
8
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
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.useFilterCollapsedState = void 0;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const useFilterCollapsedState = (filter) => {
|
|
9
|
+
// @todo use settingsCollapsedDesktop and settingsCollapsedMobile with device detection
|
|
10
|
+
const [collapsed, setCollapsed] = react_1.default.useState(filter.settingsCollapsedDesktop);
|
|
11
|
+
// when the filter is shown, it needs to stay rendered or when it's collapsed, the filter context
|
|
12
|
+
// will be lost which isn't expected behaviour
|
|
13
|
+
const [shouldRender, setShouldRender] = react_1.default.useState(!collapsed);
|
|
14
|
+
// enable render when filter is uncollapsed
|
|
15
|
+
react_1.default.useEffect(() => {
|
|
16
|
+
if (!collapsed)
|
|
17
|
+
setShouldRender(true);
|
|
18
|
+
}, [collapsed]);
|
|
19
|
+
return {
|
|
20
|
+
collapsed,
|
|
21
|
+
shouldRender,
|
|
22
|
+
collapsedShow: react_1.default.useCallback(() => setCollapsed(true), []),
|
|
23
|
+
collapsedHide: react_1.default.useCallback(() => setCollapsed(false), []),
|
|
24
|
+
collapsedToggle: react_1.default.useCallback(() => setCollapsed((collapsed) => !collapsed), []),
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
exports.useFilterCollapsedState = useFilterCollapsedState;
|
|
28
|
+
//# sourceMappingURL=useFilterCollapsedState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFilterCollapsedState.js","sourceRoot":"","sources":["../../../src/hooks/useFilterCollapsedState.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAInB,MAAM,uBAAuB,GAAG,CAAC,MAA0B,EAMhE,EAAE;IACF,uFAAuF;IACvF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,eAAK,CAAC,QAAQ,CAC9C,MAAM,CAAC,wBAAwB,CAChC,CAAC;IAEF,iGAAiG;IACjG,8CAA8C;IAC9C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAU,CAAC,SAAS,CAAC,CAAC;IAE5E,2CAA2C;IAC3C,eAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,SAAS;YAAE,eAAe,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO;QACL,SAAS;QACT,YAAY;QACZ,aAAa,EAAE,eAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAC9D,aAAa,EAAE,eAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QAC/D,eAAe,EAAE,eAAK,CAAC,WAAW,CAChC,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,EAC7C,EAAE,CACH;KACF,CAAC;AACJ,CAAC,CAAC;AA/BW,QAAA,uBAAuB,2BA+BlC","sourcesContent":["import React from \"react\";\n\nimport { ConfigFilterOption } from \"../types/config\";\n\nexport const useFilterCollapsedState = (filter: ConfigFilterOption): {\n collapsed: boolean;\n shouldRender: boolean;\n collapsedShow: () => void;\n collapsedHide: () => void;\n collapsedToggle: () => void;\n} => {\n // @todo use settingsCollapsedDesktop and settingsCollapsedMobile with device detection\n const [collapsed, setCollapsed] = React.useState<boolean>(\n filter.settingsCollapsedDesktop\n );\n\n // when the filter is shown, it needs to stay rendered or when it's collapsed, the filter context\n // will be lost which isn't expected behaviour\n const [shouldRender, setShouldRender] = React.useState<boolean>(!collapsed);\n\n // enable render when filter is uncollapsed\n React.useEffect(() => {\n if (!collapsed) setShouldRender(true);\n }, [collapsed]);\n\n return {\n collapsed,\n shouldRender,\n collapsedShow: React.useCallback(() => setCollapsed(true), []),\n collapsedHide: React.useCallback(() => setCollapsed(false), []),\n collapsedToggle: React.useCallback(\n () => setCollapsed((collapsed) => !collapsed),\n []\n ),\n };\n};\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ConfigFilterOption } from "../types/config";
|
|
2
|
+
import { ReactivesearchFilterProps } from "../types/reactivesearch";
|
|
3
|
+
export declare const useFilterListProps: (filter: ConfigFilterOption, reactivesearchFilterProps: ReactivesearchFilterProps) => ReactivesearchFilterProps & {
|
|
4
|
+
filter: ConfigFilterOption;
|
|
5
|
+
options: Array<{
|
|
6
|
+
doc_count: number;
|
|
7
|
+
key: string;
|
|
8
|
+
checked: boolean;
|
|
9
|
+
}>;
|
|
10
|
+
hasSelected: boolean;
|
|
11
|
+
totalSelected: number;
|
|
12
|
+
};
|
|
@@ -0,0 +1,63 @@
|
|
|
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.useFilterListProps = void 0;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const hooks_1 = require("../hooks");
|
|
9
|
+
const utility_1 = require("../utility");
|
|
10
|
+
// converts reactivesearch props returned in filters to a cleaned up/filtered version
|
|
11
|
+
const useFilterListProps = (filter, reactivesearchFilterProps) => {
|
|
12
|
+
const { track } = (0, hooks_1.useAnalytics)();
|
|
13
|
+
const handleChange = react_1.default.useCallback((value) => {
|
|
14
|
+
utility_1.debug.breadcrumb({
|
|
15
|
+
category: "filter",
|
|
16
|
+
message: "filter option changed",
|
|
17
|
+
data: {
|
|
18
|
+
filter: filter.name,
|
|
19
|
+
field: filter.field,
|
|
20
|
+
value: value,
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
utility_1.debug.log("useFilterListProps", "handleChange[value]", value);
|
|
24
|
+
reactivesearchFilterProps.handleChange(value);
|
|
25
|
+
track({
|
|
26
|
+
eventName: "filterChange",
|
|
27
|
+
payload: {
|
|
28
|
+
name: filter.name,
|
|
29
|
+
value: value,
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
}, [filter]);
|
|
33
|
+
const filterListProps = react_1.default.useMemo(() => {
|
|
34
|
+
// remove excluded options, sort alphabeticaly, map checked boolean
|
|
35
|
+
const options = reactivesearchFilterProps.data
|
|
36
|
+
.filter(({ key }) => {
|
|
37
|
+
var _a, _b;
|
|
38
|
+
if ((_a = filter.valuesExclude) === null || _a === void 0 ? void 0 : _a.includes(key))
|
|
39
|
+
return false;
|
|
40
|
+
if (!!((_b = filter.valuesManual) === null || _b === void 0 ? void 0 : _b.length) && !filter.valuesManual.includes(key))
|
|
41
|
+
return false;
|
|
42
|
+
return true;
|
|
43
|
+
})
|
|
44
|
+
.sort((a, b) => a.key.localeCompare(b.key))
|
|
45
|
+
.map((option) => (Object.assign(Object.assign({}, option), { checked: (typeof reactivesearchFilterProps.value === "object" &&
|
|
46
|
+
reactivesearchFilterProps.value[option.key]) ||
|
|
47
|
+
reactivesearchFilterProps.value === option.key })));
|
|
48
|
+
// work out if at least one option selected
|
|
49
|
+
const hasSelected = (typeof reactivesearchFilterProps.value === "object" &&
|
|
50
|
+
0 < Object.keys(reactivesearchFilterProps.value).length) ||
|
|
51
|
+
(typeof reactivesearchFilterProps.value !== "object" &&
|
|
52
|
+
!!reactivesearchFilterProps.value);
|
|
53
|
+
const totalSelected = options.filter((option) => option.checked).length;
|
|
54
|
+
return Object.assign(Object.assign({}, reactivesearchFilterProps), { handleChange,
|
|
55
|
+
filter,
|
|
56
|
+
options,
|
|
57
|
+
hasSelected,
|
|
58
|
+
totalSelected });
|
|
59
|
+
}, [filter, handleChange, reactivesearchFilterProps]);
|
|
60
|
+
return filterListProps;
|
|
61
|
+
};
|
|
62
|
+
exports.useFilterListProps = useFilterListProps;
|
|
63
|
+
//# sourceMappingURL=useFilterListProps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFilterListProps.js","sourceRoot":"","sources":["../../../src/hooks/useFilterListProps.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAI1B,oCAAwC;AACxC,wCAAmC;AAEnC,qFAAqF;AAC9E,MAAM,kBAAkB,GAAG,CAChC,MAA0B,EAC1B,yBAAoD,EAUpD,EAAE;IACF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAA,oBAAY,GAAE,CAAC;IAEjC,MAAM,YAAY,GAAG,eAAK,CAAC,WAAW,CACpC,CAAC,KAAa,EAAE,EAAE;QAChB,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,oBAAoB,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAE9D,yBAAyB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC9C,KAAK,CAAC;YACJ,SAAS,EAAE,cAAc;YACzB,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,KAAK;aACb;SACF,CAAC,CAAC;IACL,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,eAAe,GAAG,eAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACzC,mEAAmE;QACnE,MAAM,OAAO,GAAG,yBAAyB,CAAC,IAAI;aAC3C,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;;YAClB,IAAI,MAAA,MAAM,CAAC,aAAa,0CAAE,QAAQ,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YACtD,IAAI,CAAC,CAAC,CAAA,MAAA,MAAM,CAAC,YAAY,0CAAE,MAAM,CAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACrE,OAAO,KAAK,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aAC1C,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,iCACZ,MAAM,KACT,OAAO,EACL,CAAC,OAAO,yBAAyB,CAAC,KAAK,KAAK,QAAQ;gBAClD,yBAAyB,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC9C,yBAAyB,CAAC,KAAK,KAAK,MAAM,CAAC,GAAG,IAChD,CAAC,CAAC;QAEN,2CAA2C;QAC3C,MAAM,WAAW,GACf,CAAC,OAAO,yBAAyB,CAAC,KAAK,KAAK,QAAQ;YAClD,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;YAC1D,CAAC,OAAO,yBAAyB,CAAC,KAAK,KAAK,QAAQ;gBAClD,CAAC,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAEvC,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAExE,uCACK,yBAAyB,KAC5B,YAAY;YACZ,MAAM;YACN,OAAO;YACP,WAAW;YACX,aAAa,IACb;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,yBAAyB,CAAC,CAAC,CAAC;IAEtD,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC;AA/EW,QAAA,kBAAkB,sBA+E7B","sourcesContent":["import React from \"react\";\n\nimport { ConfigFilterOption } from \"../types/config\";\nimport { ReactivesearchFilterProps } from \"../types/reactivesearch\";\nimport { useAnalytics } from \"../hooks\";\nimport { debug } from \"../utility\";\n\n// converts reactivesearch props returned in filters to a cleaned up/filtered version\nexport const useFilterListProps = (\n filter: ConfigFilterOption,\n reactivesearchFilterProps: ReactivesearchFilterProps\n): ReactivesearchFilterProps & {\n filter: ConfigFilterOption;\n options: Array<{\n doc_count: number;\n key: string;\n checked: boolean;\n }>;\n hasSelected: boolean;\n totalSelected: number;\n} => {\n const { track } = useAnalytics();\n\n const handleChange = React.useCallback(\n (value: 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(\"useFilterListProps\", \"handleChange[value]\", value);\n\n reactivesearchFilterProps.handleChange(value);\n track({\n eventName: \"filterChange\",\n payload: {\n name: filter.name,\n value: value,\n },\n });\n },\n [filter]\n );\n\n const filterListProps = React.useMemo(() => {\n // remove excluded options, sort alphabeticaly, map checked boolean\n const options = reactivesearchFilterProps.data\n .filter(({ key }) => {\n if (filter.valuesExclude?.includes(key)) return false;\n if (!!filter.valuesManual?.length && !filter.valuesManual.includes(key))\n return false;\n return true;\n })\n .sort((a, b) => a.key.localeCompare(b.key))\n .map((option) => ({\n ...option,\n checked:\n (typeof reactivesearchFilterProps.value === \"object\" &&\n reactivesearchFilterProps.value[option.key]) ||\n reactivesearchFilterProps.value === option.key,\n }));\n\n // work out if at least one option selected\n const hasSelected =\n (typeof reactivesearchFilterProps.value === \"object\" &&\n 0 < Object.keys(reactivesearchFilterProps.value).length) ||\n (typeof reactivesearchFilterProps.value !== \"object\" &&\n !!reactivesearchFilterProps.value);\n\n const totalSelected = options.filter((option) => option.checked).length;\n\n return {\n ...reactivesearchFilterProps,\n handleChange,\n filter,\n options,\n hasSelected,\n totalSelected,\n };\n }, [filter, handleChange, reactivesearchFilterProps]);\n\n return filterListProps;\n};\n"]}
|