@usereactify/search 3.9.1 → 3.10.0
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/dist/filter/Filter.js +19 -6
- package/dist/filter/FilterList.js +1 -1
- package/dist/hooks/reactivesearch/useReactiveDataSearchProps.js +1 -1
- package/dist/hooks/useAnalytics.d.ts +50 -1
- package/dist/hooks/useAnalytics.js +40 -0
- package/dist/hooks/useFilterListProps.d.ts +1 -1
- package/dist/hooks/usePages.js +20 -0
- package/dist/hooks/useSort.js +16 -1
- package/dist/provider.js +4 -2
- package/dist/result/ResultCardCallout.d.ts +4 -1
- package/dist/result/ResultCardCallout.js +36 -21
- package/dist/result/ResultLoadMoreButton.d.ts +1 -0
- package/dist/result/ResultLoadMoreButton.js +41 -7
- package/dist/result/ResultPagination.d.ts +3 -1
- package/dist/result/ResultPagination.js +13 -3
- package/dist/result/index.d.ts +1 -0
- package/dist/result/index.js +1 -0
- package/dist/types/reactivesearch.d.ts +1 -1
- package/package.json +1 -1
package/dist/filter/Filter.js
CHANGED
|
@@ -18,11 +18,12 @@ exports.Filter = void 0;
|
|
|
18
18
|
const react_1 = __importDefault(require("react"));
|
|
19
19
|
const MultiList_1 = __importDefault(require("@appbaseio/reactivesearch/lib/components/list/MultiList"));
|
|
20
20
|
const SingleList_1 = __importDefault(require("@appbaseio/reactivesearch/lib/components/list/SingleList"));
|
|
21
|
-
const FilterList_1 = require("./FilterList");
|
|
22
21
|
const hooks_1 = require("../hooks");
|
|
22
|
+
const FilterList_1 = require("./FilterList");
|
|
23
|
+
const hooks_2 = require("../hooks");
|
|
23
24
|
const Filter = (props) => {
|
|
24
25
|
const { filter } = props;
|
|
25
|
-
const reactiveFilterListProps = (0,
|
|
26
|
+
const reactiveFilterListProps = (0, hooks_2.useReactiveFilterListProps)(filter);
|
|
26
27
|
if ("single" === filter.displayType) {
|
|
27
28
|
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
|
}
|
|
@@ -36,18 +37,30 @@ exports.Filter = Filter;
|
|
|
36
37
|
// inner component exists only so we can use memos in reactivesearch render functions
|
|
37
38
|
const FilterListInner = (props) => {
|
|
38
39
|
const { filter, noWrapper, renderFilterList, reactivesearchFilterProps } = props, otherProps = __rest(props, ["filter", "noWrapper", "renderFilterList", "reactivesearchFilterProps"]);
|
|
39
|
-
const
|
|
40
|
+
const { track } = (0, hooks_1.useAnalytics)();
|
|
41
|
+
const _a = (0, hooks_2.useFilterListProps)(filter, reactivesearchFilterProps), { handleChange } = _a, filterListProps = __rest(_a, ["handleChange"]);
|
|
42
|
+
const handleFilterChange = react_1.default.useCallback((value) => {
|
|
43
|
+
handleChange(value);
|
|
44
|
+
track({
|
|
45
|
+
eventName: "filterChange",
|
|
46
|
+
payload: {
|
|
47
|
+
name: filter.name,
|
|
48
|
+
value: value,
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
}, [filterListProps]);
|
|
52
|
+
const updatedFilterListProps = Object.assign(Object.assign({}, filterListProps), { handleChange: handleFilterChange });
|
|
40
53
|
// hide entire filter when no options available
|
|
41
54
|
if (0 === filterListProps.options.length)
|
|
42
55
|
return null;
|
|
43
56
|
if (renderFilterList) {
|
|
44
|
-
return renderFilterList(Object.assign({ filterListProps, filter }, otherProps));
|
|
57
|
+
return renderFilterList(Object.assign({ filterListProps: updatedFilterListProps, filter }, otherProps));
|
|
45
58
|
}
|
|
46
59
|
if (noWrapper) {
|
|
47
|
-
return react_1.default.createElement(FilterList_1.FilterList, Object.assign({},
|
|
60
|
+
return react_1.default.createElement(FilterList_1.FilterList, Object.assign({}, updatedFilterListProps));
|
|
48
61
|
}
|
|
49
62
|
return (react_1.default.createElement(FilterWrapper, Object.assign({}, props),
|
|
50
|
-
react_1.default.createElement(FilterList_1.FilterList, Object.assign({},
|
|
63
|
+
react_1.default.createElement(FilterList_1.FilterList, Object.assign({}, updatedFilterListProps))));
|
|
51
64
|
};
|
|
52
65
|
// wrap the filter with a clickable title
|
|
53
66
|
const FilterWrapper = ({ filter, children, collapsed, shouldRender, collapsedToggle }) => {
|
|
@@ -7,7 +7,7 @@ exports.FilterList = void 0;
|
|
|
7
7
|
const react_1 = __importDefault(require("react"));
|
|
8
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
9
|
react_1.default.createElement("label", null,
|
|
10
|
-
react_1.default.createElement("input", { value: key, type: "checkbox", checked: checked, onChange: handleChange }),
|
|
10
|
+
react_1.default.createElement("input", { value: key, type: "checkbox", checked: checked, onChange: ({ target: { value } }) => handleChange(value) }),
|
|
11
11
|
key,
|
|
12
12
|
" (",
|
|
13
13
|
doc_count,
|
|
@@ -35,7 +35,7 @@ const useReactiveDataSearchProps = (props = {}) => {
|
|
|
35
35
|
}, [submitSearch]);
|
|
36
36
|
const { track } = (0, __1.useAnalytics)();
|
|
37
37
|
const trackQuery = react_1.default.useCallback(() => {
|
|
38
|
-
if (!searchQuery)
|
|
38
|
+
if (!searchQuery || (searchQuery && searchQuery.length < 3))
|
|
39
39
|
return;
|
|
40
40
|
track({ eventName: "search", payload: { searchTerm: searchQuery } });
|
|
41
41
|
}, [searchQuery, track]);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export declare const useAnalytics: () => {
|
|
2
2
|
track: (event: TrackEvent) => Promise<import("axios").AxiosResponse<any, any> | undefined>;
|
|
3
3
|
};
|
|
4
|
-
export declare type TrackEvent = TrackEvent.SearchEvent | TrackEvent.ZeroResultsEvent | TrackEvent.ViewProductEvent | TrackEvent.ClickProductEvent;
|
|
4
|
+
export declare type TrackEvent = TrackEvent.SearchEvent | TrackEvent.ZeroResultsEvent | TrackEvent.ViewProductEvent | TrackEvent.ClickProductEvent | TrackEvent.ViewPromotionEvent | TrackEvent.ClickPromotionEvent | TrackEvent.PaginationChangeEvent | TrackEvent.SortChangeEvent | TrackEvent.FilterChangeEvent;
|
|
5
5
|
export declare namespace TrackEvent {
|
|
6
6
|
interface SearchEvent {
|
|
7
7
|
eventName: "search";
|
|
@@ -39,6 +39,55 @@ export declare namespace TrackEvent {
|
|
|
39
39
|
elasticProduct: ElasticProduct;
|
|
40
40
|
}
|
|
41
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
|
+
}
|
|
42
91
|
interface ElasticProduct {
|
|
43
92
|
id: number;
|
|
44
93
|
title: string;
|
|
@@ -57,6 +57,22 @@ function getTrackEvents(event) {
|
|
|
57
57
|
},
|
|
58
58
|
];
|
|
59
59
|
break;
|
|
60
|
+
case "viewPromotion":
|
|
61
|
+
events = [
|
|
62
|
+
{
|
|
63
|
+
eventName,
|
|
64
|
+
payload: event.payload,
|
|
65
|
+
},
|
|
66
|
+
];
|
|
67
|
+
break;
|
|
68
|
+
case "clickPromotion":
|
|
69
|
+
events = [
|
|
70
|
+
{
|
|
71
|
+
eventName,
|
|
72
|
+
payload: event.payload,
|
|
73
|
+
},
|
|
74
|
+
];
|
|
75
|
+
break;
|
|
60
76
|
case "zeroResults":
|
|
61
77
|
events = [
|
|
62
78
|
{
|
|
@@ -65,6 +81,30 @@ function getTrackEvents(event) {
|
|
|
65
81
|
},
|
|
66
82
|
];
|
|
67
83
|
break;
|
|
84
|
+
case "paginationChange":
|
|
85
|
+
events = [
|
|
86
|
+
{
|
|
87
|
+
eventName,
|
|
88
|
+
payload: event.payload,
|
|
89
|
+
},
|
|
90
|
+
];
|
|
91
|
+
break;
|
|
92
|
+
case "sortChange":
|
|
93
|
+
events = [
|
|
94
|
+
{
|
|
95
|
+
eventName,
|
|
96
|
+
payload: event.payload,
|
|
97
|
+
},
|
|
98
|
+
];
|
|
99
|
+
break;
|
|
100
|
+
case "filterChange":
|
|
101
|
+
events = [
|
|
102
|
+
{
|
|
103
|
+
eventName,
|
|
104
|
+
payload: event.payload,
|
|
105
|
+
},
|
|
106
|
+
];
|
|
107
|
+
break;
|
|
68
108
|
}
|
|
69
109
|
return events;
|
|
70
110
|
}
|
|
@@ -11,7 +11,7 @@ export declare const useFilterListProps: (filter: ConfigFilterOption, reactivese
|
|
|
11
11
|
totalSelected: number;
|
|
12
12
|
loading: boolean;
|
|
13
13
|
error: Error | null;
|
|
14
|
-
handleChange: () => void;
|
|
14
|
+
handleChange: (value: string) => void;
|
|
15
15
|
data: {
|
|
16
16
|
doc_count: number;
|
|
17
17
|
key: string;
|
package/dist/hooks/usePages.js
CHANGED
|
@@ -5,8 +5,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.usePages = void 0;
|
|
7
7
|
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const hooks_1 = require("../hooks");
|
|
8
9
|
const usePages = (props) => {
|
|
9
10
|
const { pages, setPage, totalPages, currentPage } = props;
|
|
11
|
+
const { track } = (0, hooks_1.useAnalytics)();
|
|
10
12
|
const buildPagePath = react_1.default.useCallback((page) => {
|
|
11
13
|
const currentPath = window.location.pathname;
|
|
12
14
|
return currentPath.includes("page=")
|
|
@@ -22,6 +24,15 @@ const usePages = (props) => {
|
|
|
22
24
|
if (!hasNextPage)
|
|
23
25
|
return;
|
|
24
26
|
setPage(currentPage + 1);
|
|
27
|
+
track({
|
|
28
|
+
eventName: "paginationChange",
|
|
29
|
+
payload: {
|
|
30
|
+
page: currentPage + 1,
|
|
31
|
+
source: window.location.pathname.includes("/search")
|
|
32
|
+
? "search"
|
|
33
|
+
: "collection",
|
|
34
|
+
},
|
|
35
|
+
});
|
|
25
36
|
}, [hasNextPage, currentPage, setPage]);
|
|
26
37
|
const hasPreviousPage = react_1.default.useMemo(() => actualCurrentPage > 1, [actualCurrentPage]);
|
|
27
38
|
const handlePreviousPage = react_1.default.useCallback((event) => {
|
|
@@ -29,6 +40,15 @@ const usePages = (props) => {
|
|
|
29
40
|
if (!hasPreviousPage)
|
|
30
41
|
return;
|
|
31
42
|
setPage(currentPage - 1);
|
|
43
|
+
track({
|
|
44
|
+
eventName: "paginationChange",
|
|
45
|
+
payload: {
|
|
46
|
+
page: currentPage - 1,
|
|
47
|
+
source: window.location.pathname.includes("/search")
|
|
48
|
+
? "search"
|
|
49
|
+
: "collection",
|
|
50
|
+
},
|
|
51
|
+
});
|
|
32
52
|
}, [hasPreviousPage, currentPage, setPage]);
|
|
33
53
|
return react_1.default.useMemo(() => ({
|
|
34
54
|
pagesToShow,
|
package/dist/hooks/useSort.js
CHANGED
|
@@ -1,9 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.useSort = void 0;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
4
8
|
const provider_1 = require("../provider");
|
|
9
|
+
const hooks_1 = require("../hooks");
|
|
5
10
|
const useSort = () => {
|
|
11
|
+
const { track } = (0, hooks_1.useAnalytics)();
|
|
6
12
|
const { sortOption, sortOptions, setSortOption } = (0, provider_1.useContext)();
|
|
7
|
-
|
|
13
|
+
const handleSortChange = react_1.default.useCallback((sortOptionId) => {
|
|
14
|
+
setSortOption(sortOptionId);
|
|
15
|
+
track({
|
|
16
|
+
eventName: "sortChange",
|
|
17
|
+
payload: {
|
|
18
|
+
type: sortOptionId,
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
}, [track, setSortOption]);
|
|
22
|
+
return { sortOption, sortOptions, setSortOption: handleSortChange };
|
|
8
23
|
};
|
|
9
24
|
exports.useSort = useSort;
|
package/dist/provider.js
CHANGED
|
@@ -16,8 +16,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.useContext = exports.ConfiguredProvider = exports.Provider = void 0;
|
|
18
18
|
const react_1 = __importDefault(require("react"));
|
|
19
|
-
const UtilityAuthenticatedReactiveBase_1 = require("./utility/UtilityAuthenticatedReactiveBase");
|
|
20
19
|
const hooks_1 = require("./hooks");
|
|
20
|
+
const UtilityAuthenticatedReactiveBase_1 = require("./utility/UtilityAuthenticatedReactiveBase");
|
|
21
21
|
const debug = require("debug")("reactify-search:Provider");
|
|
22
22
|
const Context = react_1.default.createContext(undefined);
|
|
23
23
|
const defaultCredentials = {
|
|
@@ -142,7 +142,9 @@ const useSortState = (config, collection) => {
|
|
|
142
142
|
}, [config, collection]);
|
|
143
143
|
const [sortOptionState, setSortOptionState] = react_1.default.useState((_a = sortOptions[0]) === null || _a === void 0 ? void 0 : _a.id);
|
|
144
144
|
const sortOption = react_1.default.useMemo(() => sortOptions.find(({ id }) => id === sortOptionState) || sortOptions[0], [sortOptions, sortOptionState]);
|
|
145
|
-
const setSortOption = react_1.default.useCallback((sortOptionId) =>
|
|
145
|
+
const setSortOption = react_1.default.useCallback((sortOptionId) => {
|
|
146
|
+
setSortOptionState(sortOptionId);
|
|
147
|
+
}, []);
|
|
146
148
|
return react_1.default.useMemo(() => ({ sortOptions, sortOption, setSortOption }), [sortOption, sortOptions, setSortOption]);
|
|
147
149
|
};
|
|
148
150
|
// resolve the "filter" in use for this view
|
|
@@ -4,7 +4,10 @@ declare type Props = {
|
|
|
4
4
|
pagePosition: number;
|
|
5
5
|
document: ElasticCallout;
|
|
6
6
|
callout: ElasticCallout["callout"];
|
|
7
|
-
render?: (props: Omit<Props, "render">
|
|
7
|
+
render?: (props: Omit<Props, "render"> & {
|
|
8
|
+
itemRef: (node?: Element | null) => void;
|
|
9
|
+
handleClick: () => void;
|
|
10
|
+
}) => JSX.Element;
|
|
8
11
|
};
|
|
9
12
|
export declare const ResultCardCallout: React.FC<Props>;
|
|
10
13
|
export {};
|
|
@@ -1,23 +1,41 @@
|
|
|
1
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
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
4
|
};
|
|
16
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
6
|
exports.ResultCardCallout = void 0;
|
|
18
7
|
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const react_intersection_observer_1 = require("react-intersection-observer");
|
|
9
|
+
const hooks_1 = require("../hooks");
|
|
19
10
|
const ResultCardCallout = (props) => {
|
|
20
|
-
const { callout } = props;
|
|
11
|
+
const { callout, render } = props;
|
|
12
|
+
const { track } = (0, hooks_1.useAnalytics)();
|
|
13
|
+
const { ref, inView } = (0, react_intersection_observer_1.useInView)({
|
|
14
|
+
threshold: 0.5,
|
|
15
|
+
triggerOnce: true,
|
|
16
|
+
});
|
|
17
|
+
const handleClick = react_1.default.useCallback(() => {
|
|
18
|
+
track({
|
|
19
|
+
eventName: "clickPromotion",
|
|
20
|
+
payload: {
|
|
21
|
+
link: callout.link,
|
|
22
|
+
title: callout.title,
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
}, [track, callout]);
|
|
26
|
+
const handleView = react_1.default.useCallback(() => {
|
|
27
|
+
track({
|
|
28
|
+
eventName: "viewPromotion",
|
|
29
|
+
payload: {
|
|
30
|
+
link: callout.link,
|
|
31
|
+
title: callout.title,
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
}, [track, callout]);
|
|
35
|
+
react_1.default.useEffect(() => {
|
|
36
|
+
if (inView)
|
|
37
|
+
handleView();
|
|
38
|
+
}, [inView]);
|
|
21
39
|
const styleProp = react_1.default.useMemo(() => {
|
|
22
40
|
var _a, _b;
|
|
23
41
|
return ({
|
|
@@ -25,14 +43,11 @@ const ResultCardCallout = (props) => {
|
|
|
25
43
|
gridColumn: `span ${(_b = callout.displayColumns) !== null && _b !== void 0 ? _b : 1}`,
|
|
26
44
|
});
|
|
27
45
|
}, [callout]);
|
|
28
|
-
return (react_1.default.createElement("article", { style: styleProp },
|
|
29
|
-
react_1.default.createElement(ResultCardCalloutInner, Object.assign({}, props))));
|
|
30
|
-
};
|
|
31
|
-
exports.ResultCardCallout = ResultCardCallout;
|
|
32
|
-
const ResultCardCalloutInner = (_a) => {
|
|
33
|
-
var { render } = _a, props = __rest(_a, ["render"]);
|
|
34
|
-
const { callout } = props;
|
|
35
46
|
if (render)
|
|
36
|
-
return render(props);
|
|
37
|
-
return react_1.default.createElement("
|
|
47
|
+
return render(Object.assign(Object.assign({}, props), { itemRef: ref, handleClick }));
|
|
48
|
+
return (react_1.default.createElement("article", { ref: ref, style: styleProp },
|
|
49
|
+
react_1.default.createElement("a", { href: callout.link, onClick: handleClick },
|
|
50
|
+
callout.desktopImage && (react_1.default.createElement("img", { src: callout.desktopImage, width: "100%" })),
|
|
51
|
+
callout.title)));
|
|
38
52
|
};
|
|
53
|
+
exports.ResultCardCallout = ResultCardCallout;
|
|
@@ -3,6 +3,7 @@ import { ReactivesearchResultProps } from "../types/reactivesearch";
|
|
|
3
3
|
declare type Props = ReactivesearchResultProps & {
|
|
4
4
|
render?: (props: Omit<Props, "render"> & {
|
|
5
5
|
hasMore: boolean;
|
|
6
|
+
handleLoadMore: () => void;
|
|
6
7
|
}) => JSX.Element;
|
|
7
8
|
};
|
|
8
9
|
export declare const ResultLoadMoreButton: React.FC<Props>;
|
|
@@ -1,4 +1,23 @@
|
|
|
1
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
2
21
|
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
22
|
var t = {};
|
|
4
23
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
@@ -10,18 +29,33 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
10
29
|
}
|
|
11
30
|
return t;
|
|
12
31
|
};
|
|
13
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
-
};
|
|
16
32
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
33
|
exports.ResultLoadMoreButton = void 0;
|
|
18
|
-
const react_1 =
|
|
34
|
+
const react_1 = __importStar(require("react"));
|
|
35
|
+
const hooks_1 = require("../hooks");
|
|
36
|
+
const hooks_2 = require("../hooks");
|
|
19
37
|
const ResultLoadMoreButton = (_a) => {
|
|
20
|
-
var { render } = _a, props = __rest(_a, ["render"]);
|
|
21
|
-
const {
|
|
38
|
+
var { render, loadMore } = _a, props = __rest(_a, ["render", "loadMore"]);
|
|
39
|
+
const { track } = (0, hooks_1.useAnalytics)();
|
|
40
|
+
const filterStack = (0, hooks_2.useFilterStack)();
|
|
41
|
+
const { resultStats } = props;
|
|
22
42
|
const hasMore = react_1.default.useMemo(() => resultStats.displayedResults !== resultStats.numberOfResults, [resultStats]);
|
|
43
|
+
const handleLoadMore = (0, react_1.useCallback)(() => {
|
|
44
|
+
loadMore();
|
|
45
|
+
track({
|
|
46
|
+
eventName: "paginationChange",
|
|
47
|
+
payload: {
|
|
48
|
+
page: Math.ceil(resultStats.displayedResults / ((filterStack === null || filterStack === void 0 ? void 0 : filterStack.pageSize) || 20)) + 1,
|
|
49
|
+
source: window.location.pathname.includes("/search")
|
|
50
|
+
? "search"
|
|
51
|
+
: "collection",
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
}, [loadMore, track, resultStats, filterStack]);
|
|
23
55
|
if (render)
|
|
24
|
-
return render(Object.assign(Object.assign({}, props), { hasMore
|
|
56
|
+
return render(Object.assign(Object.assign({}, props), { hasMore,
|
|
57
|
+
// @todo: remove legacy loadMore prop in future versions
|
|
58
|
+
loadMore: handleLoadMore, handleLoadMore }));
|
|
25
59
|
return react_1.default.createElement("button", { onClick: () => loadMore() }, "Load more");
|
|
26
60
|
};
|
|
27
61
|
exports.ResultLoadMoreButton = ResultLoadMoreButton;
|
|
@@ -2,7 +2,9 @@ import React from "react";
|
|
|
2
2
|
import { usePages } from "../hooks";
|
|
3
3
|
import { ReactivesearchPaginationProps } from "../types/reactivesearch";
|
|
4
4
|
declare type Props = ReactivesearchPaginationProps & {
|
|
5
|
-
render?: (props: Omit<Props, "render"> & ReturnType<typeof usePages>
|
|
5
|
+
render?: (props: Omit<Props, "render"> & ReturnType<typeof usePages> & {
|
|
6
|
+
handlePageChange: (event: any, page: number) => void;
|
|
7
|
+
}) => JSX.Element;
|
|
6
8
|
};
|
|
7
9
|
export declare const ResultPagination: React.FC<Props>;
|
|
8
10
|
export {};
|
|
@@ -19,15 +19,25 @@ const react_1 = __importDefault(require("react"));
|
|
|
19
19
|
const hooks_1 = require("../hooks");
|
|
20
20
|
const ResultPagination = (_a) => {
|
|
21
21
|
var { render } = _a, props = __rest(_a, ["render"]);
|
|
22
|
+
const { track } = (0, hooks_1.useAnalytics)();
|
|
22
23
|
const pageProps = (0, hooks_1.usePages)(props);
|
|
23
|
-
if (render)
|
|
24
|
-
return render(Object.assign(Object.assign({}, props), pageProps));
|
|
25
24
|
const { pagesToShow, buildPagePath } = pageProps;
|
|
26
25
|
const { currentPage, totalPages, setPage } = props;
|
|
27
26
|
const handlePageChange = react_1.default.useCallback((event, newPage) => {
|
|
28
27
|
event.preventDefault();
|
|
29
28
|
setPage(newPage);
|
|
30
|
-
|
|
29
|
+
track({
|
|
30
|
+
eventName: "paginationChange",
|
|
31
|
+
payload: {
|
|
32
|
+
page: newPage + 1,
|
|
33
|
+
source: window.location.pathname.includes("/search")
|
|
34
|
+
? "search"
|
|
35
|
+
: "collection",
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
}, [setPage, track]);
|
|
39
|
+
if (render)
|
|
40
|
+
return render(Object.assign(Object.assign(Object.assign({}, props), pageProps), { handlePageChange }));
|
|
31
41
|
if (!totalPages)
|
|
32
42
|
return null;
|
|
33
43
|
return (react_1.default.createElement("nav", null,
|
package/dist/result/index.d.ts
CHANGED
package/dist/result/index.js
CHANGED
|
@@ -15,3 +15,4 @@ __exportStar(require("./ResultCard"), exports);
|
|
|
15
15
|
__exportStar(require("./ResultPagination"), exports);
|
|
16
16
|
__exportStar(require("./ResultStateProvider"), exports);
|
|
17
17
|
__exportStar(require("./ResultLoadMoreButton"), exports);
|
|
18
|
+
__exportStar(require("./ResultPaginationNextPrev"), exports);
|