instantsearch-ui-components 0.4.0 → 0.6.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/cjs/components/FrequentlyBoughtTogether.js +78 -0
- package/dist/cjs/components/Hits.js +41 -8
- package/dist/cjs/components/LookingSimilar.js +78 -0
- package/dist/cjs/components/RelatedProducts.js +78 -0
- package/dist/cjs/components/TrendingItems.js +78 -0
- package/dist/cjs/components/index.js +44 -0
- package/dist/cjs/components/recommend-shared/DefaultEmpty.js +14 -0
- package/dist/cjs/components/recommend-shared/DefaultHeader.js +24 -0
- package/dist/cjs/components/recommend-shared/DefaultItem.js +13 -0
- package/dist/cjs/components/recommend-shared/ListView.js +30 -0
- package/dist/cjs/components/recommend-shared/index.js +49 -0
- package/dist/cjs/types/Recommend.js +1 -0
- package/dist/cjs/types/index.js +22 -0
- package/dist/cjs/types/shared.js +1 -0
- package/dist/cjs/version.js +1 -1
- package/dist/es/components/FrequentlyBoughtTogether.d.ts +4 -0
- package/dist/es/components/FrequentlyBoughtTogether.js +71 -0
- package/dist/es/components/Hits.d.ts +31 -3
- package/dist/es/components/Hits.js +41 -8
- package/dist/es/components/LookingSimilar.d.ts +4 -0
- package/dist/es/components/LookingSimilar.js +71 -0
- package/dist/es/components/RelatedProducts.d.ts +4 -0
- package/dist/es/components/RelatedProducts.js +71 -0
- package/dist/es/components/TrendingItems.d.ts +4 -0
- package/dist/es/components/TrendingItems.js +71 -0
- package/dist/es/components/index.d.ts +4 -0
- package/dist/es/components/index.js +5 -1
- package/dist/es/components/recommend-shared/DefaultEmpty.d.ts +3 -0
- package/dist/es/components/recommend-shared/DefaultEmpty.js +8 -0
- package/dist/es/components/recommend-shared/DefaultHeader.d.ts +3 -0
- package/dist/es/components/recommend-shared/DefaultHeader.js +18 -0
- package/dist/es/components/recommend-shared/DefaultItem.d.ts +3 -0
- package/dist/es/components/recommend-shared/DefaultItem.js +7 -0
- package/dist/es/components/recommend-shared/ListView.d.ts +3 -0
- package/dist/es/components/recommend-shared/ListView.js +24 -0
- package/dist/es/components/recommend-shared/index.d.ts +4 -0
- package/dist/es/components/recommend-shared/index.js +4 -0
- package/dist/es/types/Recommend.d.ts +71 -0
- package/dist/es/types/Recommend.js +1 -0
- package/dist/es/types/index.d.ts +2 -0
- package/dist/es/types/index.js +3 -1
- package/dist/es/types/shared.d.ts +1 -0
- package/dist/es/types/shared.js +1 -0
- package/dist/es/version.d.ts +1 -1
- package/dist/es/version.js +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
4
|
+
var _excluded = ["classNames", "emptyComponent", "headerComponent", "itemComponent", "view", "items", "status", "translations", "sendEvent"];
|
|
5
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
6
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
7
|
+
import { cx } from "../lib/index.js";
|
|
8
|
+
import { createDefaultEmptyComponent, createDefaultHeaderComponent, createDefaultItemComponent, createListViewComponent } from "./recommend-shared/index.js";
|
|
9
|
+
export function createFrequentlyBoughtTogetherComponent(_ref) {
|
|
10
|
+
var createElement = _ref.createElement,
|
|
11
|
+
Fragment = _ref.Fragment;
|
|
12
|
+
return function FrequentlyBoughtTogether(userProps) {
|
|
13
|
+
var _userProps$classNames = userProps.classNames,
|
|
14
|
+
classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
|
|
15
|
+
_userProps$emptyCompo = userProps.emptyComponent,
|
|
16
|
+
EmptyComponent = _userProps$emptyCompo === void 0 ? createDefaultEmptyComponent({
|
|
17
|
+
createElement: createElement,
|
|
18
|
+
Fragment: Fragment
|
|
19
|
+
}) : _userProps$emptyCompo,
|
|
20
|
+
_userProps$headerComp = userProps.headerComponent,
|
|
21
|
+
HeaderComponent = _userProps$headerComp === void 0 ? createDefaultHeaderComponent({
|
|
22
|
+
createElement: createElement,
|
|
23
|
+
Fragment: Fragment
|
|
24
|
+
}) : _userProps$headerComp,
|
|
25
|
+
_userProps$itemCompon = userProps.itemComponent,
|
|
26
|
+
ItemComponent = _userProps$itemCompon === void 0 ? createDefaultItemComponent({
|
|
27
|
+
createElement: createElement,
|
|
28
|
+
Fragment: Fragment
|
|
29
|
+
}) : _userProps$itemCompon,
|
|
30
|
+
_userProps$view = userProps.view,
|
|
31
|
+
View = _userProps$view === void 0 ? createListViewComponent({
|
|
32
|
+
createElement: createElement,
|
|
33
|
+
Fragment: Fragment
|
|
34
|
+
}) : _userProps$view,
|
|
35
|
+
items = userProps.items,
|
|
36
|
+
status = userProps.status,
|
|
37
|
+
userTranslations = userProps.translations,
|
|
38
|
+
sendEvent = userProps.sendEvent,
|
|
39
|
+
props = _objectWithoutProperties(userProps, _excluded);
|
|
40
|
+
var translations = _objectSpread({
|
|
41
|
+
title: 'Frequently bought together',
|
|
42
|
+
sliderLabel: 'Frequently bought together products'
|
|
43
|
+
}, userTranslations);
|
|
44
|
+
var cssClasses = {
|
|
45
|
+
root: cx('ais-FrequentlyBoughtTogether', classNames.root),
|
|
46
|
+
emptyRoot: cx('ais-FrequentlyBoughtTogether', classNames.root, 'ais-FrequentlyBoughtTogether--empty', classNames.emptyRoot, props.className),
|
|
47
|
+
title: cx('ais-FrequentlyBoughtTogether-title', classNames.title),
|
|
48
|
+
container: cx('ais-FrequentlyBoughtTogether-container', classNames.container),
|
|
49
|
+
list: cx('ais-FrequentlyBoughtTogether-list', classNames.list),
|
|
50
|
+
item: cx('ais-FrequentlyBoughtTogether-item', classNames.item)
|
|
51
|
+
};
|
|
52
|
+
if (items.length === 0 && status === 'idle') {
|
|
53
|
+
return createElement("section", _extends({}, props, {
|
|
54
|
+
className: cssClasses.emptyRoot
|
|
55
|
+
}), createElement(EmptyComponent, null));
|
|
56
|
+
}
|
|
57
|
+
return createElement("section", _extends({}, props, {
|
|
58
|
+
className: cssClasses.root
|
|
59
|
+
}), createElement(HeaderComponent, {
|
|
60
|
+
classNames: cssClasses,
|
|
61
|
+
items: items,
|
|
62
|
+
translations: translations
|
|
63
|
+
}), createElement(View, {
|
|
64
|
+
classNames: cssClasses,
|
|
65
|
+
translations: translations,
|
|
66
|
+
itemComponent: ItemComponent,
|
|
67
|
+
items: items,
|
|
68
|
+
sendEvent: sendEvent
|
|
69
|
+
}));
|
|
70
|
+
};
|
|
71
|
+
}
|
|
@@ -1,8 +1,19 @@
|
|
|
1
|
-
import type { ComponentProps, Renderer } from '../types';
|
|
1
|
+
import type { ComponentProps, Renderer, SendEventForHits } from '../types';
|
|
2
2
|
type Hit = Record<string, unknown> & {
|
|
3
3
|
objectID: string;
|
|
4
4
|
};
|
|
5
|
-
type
|
|
5
|
+
type Banner = {
|
|
6
|
+
image: {
|
|
7
|
+
urls: Array<{
|
|
8
|
+
url: string;
|
|
9
|
+
}>;
|
|
10
|
+
title?: string;
|
|
11
|
+
};
|
|
12
|
+
link?: {
|
|
13
|
+
url: string;
|
|
14
|
+
target?: '_blank' | '_self';
|
|
15
|
+
};
|
|
16
|
+
};
|
|
6
17
|
export type HitsProps<THit> = ComponentProps<'div'> & {
|
|
7
18
|
hits: THit[];
|
|
8
19
|
itemComponent: (props: {
|
|
@@ -15,7 +26,12 @@ export type HitsProps<THit> = ComponentProps<'div'> & {
|
|
|
15
26
|
sendEvent: SendEventForHits;
|
|
16
27
|
classNames?: Partial<HitsClassNames>;
|
|
17
28
|
emptyComponent?: (props: {
|
|
29
|
+
className?: string;
|
|
30
|
+
}) => JSX.Element;
|
|
31
|
+
banner?: Banner;
|
|
32
|
+
bannerComponent?: (props: {
|
|
18
33
|
className: string;
|
|
34
|
+
banner: Banner;
|
|
19
35
|
}) => JSX.Element;
|
|
20
36
|
};
|
|
21
37
|
export type HitsClassNames = {
|
|
@@ -35,6 +51,18 @@ export type HitsClassNames = {
|
|
|
35
51
|
* Class names to apply to each item element
|
|
36
52
|
*/
|
|
37
53
|
item: string | string[];
|
|
54
|
+
/**
|
|
55
|
+
* Class names to apply to the banner element
|
|
56
|
+
*/
|
|
57
|
+
bannerRoot: string | string[];
|
|
58
|
+
/**
|
|
59
|
+
* Class names to apply to the banner image element
|
|
60
|
+
*/
|
|
61
|
+
bannerImage: string | string[];
|
|
62
|
+
/**
|
|
63
|
+
* Class names to apply to the banner link element
|
|
64
|
+
*/
|
|
65
|
+
bannerLink: string | string[];
|
|
38
66
|
};
|
|
39
|
-
export declare function createHitsComponent({ createElement }: Renderer): <THit extends Hit>(userProps: HitsProps<THit>) => JSX.Element;
|
|
67
|
+
export declare function createHitsComponent({ createElement, Fragment }: Renderer): <THit extends Hit>(userProps: HitsProps<THit>) => JSX.Element;
|
|
40
68
|
export {};
|
|
@@ -1,12 +1,42 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
3
|
-
var _excluded = ["classNames", "hits", "itemComponent", "sendEvent", "emptyComponent"];
|
|
3
|
+
var _excluded = ["classNames", "hits", "itemComponent", "sendEvent", "emptyComponent", "banner", "bannerComponent"];
|
|
4
4
|
import { cx } from "../lib/index.js";
|
|
5
5
|
|
|
6
6
|
// Should be imported from a shared package in the future
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
function createDefaultBannerComponent(_ref) {
|
|
9
9
|
var createElement = _ref.createElement;
|
|
10
|
+
return function DefaultBanner(_ref2) {
|
|
11
|
+
var classNames = _ref2.classNames,
|
|
12
|
+
banner = _ref2.banner;
|
|
13
|
+
if (!banner.image.urls[0].url) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
return createElement("aside", {
|
|
17
|
+
className: cx('ais-Hits-banner', classNames.bannerRoot)
|
|
18
|
+
}, banner.link ? createElement("a", {
|
|
19
|
+
className: cx('ais-Hits-banner-link', classNames.bannerLink),
|
|
20
|
+
href: banner.link.url,
|
|
21
|
+
target: banner.link.target
|
|
22
|
+
}, createElement("img", {
|
|
23
|
+
className: cx('ais-Hits-banner-image', classNames.bannerImage),
|
|
24
|
+
src: banner.image.urls[0].url,
|
|
25
|
+
alt: banner.image.title
|
|
26
|
+
})) : createElement("img", {
|
|
27
|
+
className: cx('ais-Hits-banner-image', classNames.bannerImage),
|
|
28
|
+
src: banner.image.urls[0].url,
|
|
29
|
+
alt: banner.image.title
|
|
30
|
+
}));
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export function createHitsComponent(_ref3) {
|
|
34
|
+
var createElement = _ref3.createElement,
|
|
35
|
+
Fragment = _ref3.Fragment;
|
|
36
|
+
var DefaultBannerComponent = createDefaultBannerComponent({
|
|
37
|
+
createElement: createElement,
|
|
38
|
+
Fragment: Fragment
|
|
39
|
+
});
|
|
10
40
|
return function Hits(userProps) {
|
|
11
41
|
var _userProps$classNames = userProps.classNames,
|
|
12
42
|
classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
|
|
@@ -14,15 +44,18 @@ export function createHitsComponent(_ref) {
|
|
|
14
44
|
ItemComponent = userProps.itemComponent,
|
|
15
45
|
sendEvent = userProps.sendEvent,
|
|
16
46
|
EmptyComponent = userProps.emptyComponent,
|
|
47
|
+
banner = userProps.banner,
|
|
48
|
+
BannerComponent = userProps.bannerComponent,
|
|
17
49
|
props = _objectWithoutProperties(userProps, _excluded);
|
|
18
|
-
if (hits.length === 0 && EmptyComponent) {
|
|
19
|
-
return createElement(EmptyComponent, {
|
|
20
|
-
className: cx('ais-Hits', classNames.root, cx('ais-Hits--empty', classNames.emptyRoot), props.className)
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
50
|
return createElement("div", _extends({}, props, {
|
|
24
51
|
className: cx('ais-Hits', classNames.root, hits.length === 0 && cx('ais-Hits--empty', classNames.emptyRoot), props.className)
|
|
25
|
-
}), createElement(
|
|
52
|
+
}), banner && (BannerComponent ? createElement(BannerComponent, {
|
|
53
|
+
className: cx('ais-Hits-banner', classNames.bannerRoot),
|
|
54
|
+
banner: banner
|
|
55
|
+
}) : createElement(DefaultBannerComponent, {
|
|
56
|
+
classNames: classNames,
|
|
57
|
+
banner: banner
|
|
58
|
+
})), hits.length === 0 && EmptyComponent ? createElement(EmptyComponent, null) : createElement("ol", {
|
|
26
59
|
className: cx('ais-Hits-list', classNames.list)
|
|
27
60
|
}, hits.map(function (hit, index) {
|
|
28
61
|
return createElement(ItemComponent, {
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** @jsx createElement */
|
|
2
|
+
import type { ComponentProps, RecommendComponentProps, Renderer } from '../types';
|
|
3
|
+
export type LookingSimilarProps<TObject, TComponentProps extends Record<string, unknown> = Record<string, unknown>> = ComponentProps<'div'> & RecommendComponentProps<TObject, TComponentProps>;
|
|
4
|
+
export declare function createLookingSimilarComponent({ createElement, Fragment, }: Renderer): <TObject>(userProps: LookingSimilarProps<TObject, Record<string, unknown>>) => JSX.Element;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
4
|
+
var _excluded = ["classNames", "emptyComponent", "headerComponent", "itemComponent", "view", "items", "status", "translations", "sendEvent"];
|
|
5
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
6
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
7
|
+
import { cx } from "../lib/index.js";
|
|
8
|
+
import { createDefaultEmptyComponent, createDefaultHeaderComponent, createDefaultItemComponent, createListViewComponent } from "./recommend-shared/index.js";
|
|
9
|
+
export function createLookingSimilarComponent(_ref) {
|
|
10
|
+
var createElement = _ref.createElement,
|
|
11
|
+
Fragment = _ref.Fragment;
|
|
12
|
+
return function LookingSimilar(userProps) {
|
|
13
|
+
var _userProps$classNames = userProps.classNames,
|
|
14
|
+
classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
|
|
15
|
+
_userProps$emptyCompo = userProps.emptyComponent,
|
|
16
|
+
EmptyComponent = _userProps$emptyCompo === void 0 ? createDefaultEmptyComponent({
|
|
17
|
+
createElement: createElement,
|
|
18
|
+
Fragment: Fragment
|
|
19
|
+
}) : _userProps$emptyCompo,
|
|
20
|
+
_userProps$headerComp = userProps.headerComponent,
|
|
21
|
+
HeaderComponent = _userProps$headerComp === void 0 ? createDefaultHeaderComponent({
|
|
22
|
+
createElement: createElement,
|
|
23
|
+
Fragment: Fragment
|
|
24
|
+
}) : _userProps$headerComp,
|
|
25
|
+
_userProps$itemCompon = userProps.itemComponent,
|
|
26
|
+
ItemComponent = _userProps$itemCompon === void 0 ? createDefaultItemComponent({
|
|
27
|
+
createElement: createElement,
|
|
28
|
+
Fragment: Fragment
|
|
29
|
+
}) : _userProps$itemCompon,
|
|
30
|
+
_userProps$view = userProps.view,
|
|
31
|
+
View = _userProps$view === void 0 ? createListViewComponent({
|
|
32
|
+
createElement: createElement,
|
|
33
|
+
Fragment: Fragment
|
|
34
|
+
}) : _userProps$view,
|
|
35
|
+
items = userProps.items,
|
|
36
|
+
status = userProps.status,
|
|
37
|
+
userTranslations = userProps.translations,
|
|
38
|
+
sendEvent = userProps.sendEvent,
|
|
39
|
+
props = _objectWithoutProperties(userProps, _excluded);
|
|
40
|
+
var translations = _objectSpread({
|
|
41
|
+
title: 'Looking similar',
|
|
42
|
+
sliderLabel: 'Looking similar'
|
|
43
|
+
}, userTranslations);
|
|
44
|
+
var cssClasses = {
|
|
45
|
+
root: cx('ais-LookingSimilar', classNames.root),
|
|
46
|
+
emptyRoot: cx('ais-LookingSimilar', classNames.root, 'ais-LookingSimilar--empty', classNames.emptyRoot, props.className),
|
|
47
|
+
title: cx('ais-LookingSimilar-title', classNames.title),
|
|
48
|
+
container: cx('ais-LookingSimilar-container', classNames.container),
|
|
49
|
+
list: cx('ais-LookingSimilar-list', classNames.list),
|
|
50
|
+
item: cx('ais-LookingSimilar-item', classNames.item)
|
|
51
|
+
};
|
|
52
|
+
if (items.length === 0 && status === 'idle') {
|
|
53
|
+
return createElement("section", _extends({}, props, {
|
|
54
|
+
className: cssClasses.emptyRoot
|
|
55
|
+
}), createElement(EmptyComponent, null));
|
|
56
|
+
}
|
|
57
|
+
return createElement("section", _extends({}, props, {
|
|
58
|
+
className: cssClasses.root
|
|
59
|
+
}), createElement(HeaderComponent, {
|
|
60
|
+
classNames: cssClasses,
|
|
61
|
+
items: items,
|
|
62
|
+
translations: translations
|
|
63
|
+
}), createElement(View, {
|
|
64
|
+
classNames: cssClasses,
|
|
65
|
+
translations: translations,
|
|
66
|
+
itemComponent: ItemComponent,
|
|
67
|
+
items: items,
|
|
68
|
+
sendEvent: sendEvent
|
|
69
|
+
}));
|
|
70
|
+
};
|
|
71
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** @jsx createElement */
|
|
2
|
+
import type { ComponentProps, RecommendComponentProps, Renderer } from '../types';
|
|
3
|
+
export type RelatedProductsProps<TObject, TComponentProps extends Record<string, unknown> = Record<string, unknown>> = ComponentProps<'div'> & RecommendComponentProps<TObject, TComponentProps>;
|
|
4
|
+
export declare function createRelatedProductsComponent({ createElement, Fragment, }: Renderer): <TObject>(userProps: RelatedProductsProps<TObject, Record<string, unknown>>) => JSX.Element;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
4
|
+
var _excluded = ["classNames", "emptyComponent", "headerComponent", "itemComponent", "view", "items", "status", "translations", "sendEvent"];
|
|
5
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
6
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
7
|
+
import { cx } from "../lib/index.js";
|
|
8
|
+
import { createDefaultEmptyComponent, createDefaultHeaderComponent, createDefaultItemComponent, createListViewComponent } from "./recommend-shared/index.js";
|
|
9
|
+
export function createRelatedProductsComponent(_ref) {
|
|
10
|
+
var createElement = _ref.createElement,
|
|
11
|
+
Fragment = _ref.Fragment;
|
|
12
|
+
return function RelatedProducts(userProps) {
|
|
13
|
+
var _userProps$classNames = userProps.classNames,
|
|
14
|
+
classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
|
|
15
|
+
_userProps$emptyCompo = userProps.emptyComponent,
|
|
16
|
+
EmptyComponent = _userProps$emptyCompo === void 0 ? createDefaultEmptyComponent({
|
|
17
|
+
createElement: createElement,
|
|
18
|
+
Fragment: Fragment
|
|
19
|
+
}) : _userProps$emptyCompo,
|
|
20
|
+
_userProps$headerComp = userProps.headerComponent,
|
|
21
|
+
HeaderComponent = _userProps$headerComp === void 0 ? createDefaultHeaderComponent({
|
|
22
|
+
createElement: createElement,
|
|
23
|
+
Fragment: Fragment
|
|
24
|
+
}) : _userProps$headerComp,
|
|
25
|
+
_userProps$itemCompon = userProps.itemComponent,
|
|
26
|
+
ItemComponent = _userProps$itemCompon === void 0 ? createDefaultItemComponent({
|
|
27
|
+
createElement: createElement,
|
|
28
|
+
Fragment: Fragment
|
|
29
|
+
}) : _userProps$itemCompon,
|
|
30
|
+
_userProps$view = userProps.view,
|
|
31
|
+
View = _userProps$view === void 0 ? createListViewComponent({
|
|
32
|
+
createElement: createElement,
|
|
33
|
+
Fragment: Fragment
|
|
34
|
+
}) : _userProps$view,
|
|
35
|
+
items = userProps.items,
|
|
36
|
+
status = userProps.status,
|
|
37
|
+
userTranslations = userProps.translations,
|
|
38
|
+
sendEvent = userProps.sendEvent,
|
|
39
|
+
props = _objectWithoutProperties(userProps, _excluded);
|
|
40
|
+
var translations = _objectSpread({
|
|
41
|
+
title: 'Related products',
|
|
42
|
+
sliderLabel: 'Related products'
|
|
43
|
+
}, userTranslations);
|
|
44
|
+
var cssClasses = {
|
|
45
|
+
root: cx('ais-RelatedProducts', classNames.root),
|
|
46
|
+
emptyRoot: cx('ais-RelatedProducts', classNames.root, 'ais-RelatedProducts--empty', classNames.emptyRoot, props.className),
|
|
47
|
+
title: cx('ais-RelatedProducts-title', classNames.title),
|
|
48
|
+
container: cx('ais-RelatedProducts-container', classNames.container),
|
|
49
|
+
list: cx('ais-RelatedProducts-list', classNames.list),
|
|
50
|
+
item: cx('ais-RelatedProducts-item', classNames.item)
|
|
51
|
+
};
|
|
52
|
+
if (items.length === 0 && status === 'idle') {
|
|
53
|
+
return createElement("section", _extends({}, props, {
|
|
54
|
+
className: cssClasses.emptyRoot
|
|
55
|
+
}), createElement(EmptyComponent, null));
|
|
56
|
+
}
|
|
57
|
+
return createElement("section", _extends({}, props, {
|
|
58
|
+
className: cssClasses.root
|
|
59
|
+
}), createElement(HeaderComponent, {
|
|
60
|
+
classNames: cssClasses,
|
|
61
|
+
items: items,
|
|
62
|
+
translations: translations
|
|
63
|
+
}), createElement(View, {
|
|
64
|
+
classNames: cssClasses,
|
|
65
|
+
translations: translations,
|
|
66
|
+
itemComponent: ItemComponent,
|
|
67
|
+
items: items,
|
|
68
|
+
sendEvent: sendEvent
|
|
69
|
+
}));
|
|
70
|
+
};
|
|
71
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** @jsx createElement */
|
|
2
|
+
import type { ComponentProps, RecommendComponentProps, Renderer } from '../types';
|
|
3
|
+
export type TrendingItemsProps<TObject, TComponentProps extends Record<string, unknown> = Record<string, unknown>> = ComponentProps<'div'> & RecommendComponentProps<TObject, TComponentProps>;
|
|
4
|
+
export declare function createTrendingItemsComponent({ createElement, Fragment, }: Renderer): <TObject>(userProps: TrendingItemsProps<TObject, Record<string, unknown>>) => JSX.Element;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
4
|
+
var _excluded = ["classNames", "emptyComponent", "headerComponent", "itemComponent", "view", "items", "status", "translations", "sendEvent"];
|
|
5
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
6
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
7
|
+
import { cx } from "../lib/index.js";
|
|
8
|
+
import { createDefaultEmptyComponent, createDefaultHeaderComponent, createDefaultItemComponent, createListViewComponent } from "./recommend-shared/index.js";
|
|
9
|
+
export function createTrendingItemsComponent(_ref) {
|
|
10
|
+
var createElement = _ref.createElement,
|
|
11
|
+
Fragment = _ref.Fragment;
|
|
12
|
+
return function TrendingItems(userProps) {
|
|
13
|
+
var _userProps$classNames = userProps.classNames,
|
|
14
|
+
classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
|
|
15
|
+
_userProps$emptyCompo = userProps.emptyComponent,
|
|
16
|
+
EmptyComponent = _userProps$emptyCompo === void 0 ? createDefaultEmptyComponent({
|
|
17
|
+
createElement: createElement,
|
|
18
|
+
Fragment: Fragment
|
|
19
|
+
}) : _userProps$emptyCompo,
|
|
20
|
+
_userProps$headerComp = userProps.headerComponent,
|
|
21
|
+
HeaderComponent = _userProps$headerComp === void 0 ? createDefaultHeaderComponent({
|
|
22
|
+
createElement: createElement,
|
|
23
|
+
Fragment: Fragment
|
|
24
|
+
}) : _userProps$headerComp,
|
|
25
|
+
_userProps$itemCompon = userProps.itemComponent,
|
|
26
|
+
ItemComponent = _userProps$itemCompon === void 0 ? createDefaultItemComponent({
|
|
27
|
+
createElement: createElement,
|
|
28
|
+
Fragment: Fragment
|
|
29
|
+
}) : _userProps$itemCompon,
|
|
30
|
+
_userProps$view = userProps.view,
|
|
31
|
+
View = _userProps$view === void 0 ? createListViewComponent({
|
|
32
|
+
createElement: createElement,
|
|
33
|
+
Fragment: Fragment
|
|
34
|
+
}) : _userProps$view,
|
|
35
|
+
items = userProps.items,
|
|
36
|
+
status = userProps.status,
|
|
37
|
+
userTranslations = userProps.translations,
|
|
38
|
+
sendEvent = userProps.sendEvent,
|
|
39
|
+
props = _objectWithoutProperties(userProps, _excluded);
|
|
40
|
+
var translations = _objectSpread({
|
|
41
|
+
title: 'Trending items',
|
|
42
|
+
sliderLabel: 'Trending items'
|
|
43
|
+
}, userTranslations);
|
|
44
|
+
var cssClasses = {
|
|
45
|
+
root: cx('ais-TrendingItems', classNames.root),
|
|
46
|
+
emptyRoot: cx('ais-TrendingItems', classNames.root, 'ais-TrendingItems--empty', classNames.emptyRoot, props.className),
|
|
47
|
+
title: cx('ais-TrendingItems-title', classNames.title),
|
|
48
|
+
container: cx('ais-TrendingItems-container', classNames.container),
|
|
49
|
+
list: cx('ais-TrendingItems-list', classNames.list),
|
|
50
|
+
item: cx('ais-TrendingItems-item', classNames.item)
|
|
51
|
+
};
|
|
52
|
+
if (items.length === 0 && status === 'idle') {
|
|
53
|
+
return createElement("section", _extends({}, props, {
|
|
54
|
+
className: cssClasses.emptyRoot
|
|
55
|
+
}), createElement(EmptyComponent, null));
|
|
56
|
+
}
|
|
57
|
+
return createElement("section", _extends({}, props, {
|
|
58
|
+
className: cssClasses.root
|
|
59
|
+
}), createElement(HeaderComponent, {
|
|
60
|
+
classNames: cssClasses,
|
|
61
|
+
items: items,
|
|
62
|
+
translations: translations
|
|
63
|
+
}), createElement(View, {
|
|
64
|
+
classNames: cssClasses,
|
|
65
|
+
translations: translations,
|
|
66
|
+
itemComponent: ItemComponent,
|
|
67
|
+
items: items,
|
|
68
|
+
sendEvent: sendEvent
|
|
69
|
+
}));
|
|
70
|
+
};
|
|
71
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function createDefaultHeaderComponent(_ref) {
|
|
2
|
+
var createElement = _ref.createElement;
|
|
3
|
+
return function DefaultHeader(userProps) {
|
|
4
|
+
var _userProps$classNames = userProps.classNames,
|
|
5
|
+
classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
|
|
6
|
+
items = userProps.items,
|
|
7
|
+
translations = userProps.translations;
|
|
8
|
+
if (!items || items.length < 1) {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
if (!translations.title) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
return createElement("h3", {
|
|
15
|
+
className: classNames.title
|
|
16
|
+
}, translations.title);
|
|
17
|
+
};
|
|
18
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/** @jsx createElement */
|
|
2
|
+
import type { RecommendClassNames, RecommendTranslations, RecordWithObjectID, Renderer, RecommendViewProps } from '../../types';
|
|
3
|
+
export declare function createListViewComponent({ createElement }: Renderer): <TItem extends RecordWithObjectID>(userProps: RecommendViewProps<TItem, RecommendTranslations, Partial<RecommendClassNames>>) => JSX.Element;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export function createListViewComponent(_ref) {
|
|
2
|
+
var createElement = _ref.createElement;
|
|
3
|
+
return function ListView(userProps) {
|
|
4
|
+
var _userProps$classNames = userProps.classNames,
|
|
5
|
+
classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
|
|
6
|
+
ItemComponent = userProps.itemComponent,
|
|
7
|
+
items = userProps.items,
|
|
8
|
+
sendEvent = userProps.sendEvent;
|
|
9
|
+
return createElement("div", {
|
|
10
|
+
className: classNames.container
|
|
11
|
+
}, createElement("ol", {
|
|
12
|
+
className: classNames.list
|
|
13
|
+
}, items.map(function (item) {
|
|
14
|
+
return createElement("li", {
|
|
15
|
+
key: item.objectID,
|
|
16
|
+
className: classNames.item,
|
|
17
|
+
onClick: sendEvent,
|
|
18
|
+
onAuxClick: sendEvent
|
|
19
|
+
}, createElement(ItemComponent, {
|
|
20
|
+
item: item
|
|
21
|
+
}));
|
|
22
|
+
})));
|
|
23
|
+
};
|
|
24
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { SendEventForHits } from '.';
|
|
2
|
+
export type RecommendClassNames = {
|
|
3
|
+
/**
|
|
4
|
+
* Class names to apply to the root element
|
|
5
|
+
*/
|
|
6
|
+
root: string;
|
|
7
|
+
/**
|
|
8
|
+
* Class names to apply to the root element without results
|
|
9
|
+
*/
|
|
10
|
+
emptyRoot: string;
|
|
11
|
+
/**
|
|
12
|
+
* Class names to apply to the title element
|
|
13
|
+
*/
|
|
14
|
+
title: string;
|
|
15
|
+
/**
|
|
16
|
+
* Class names to apply to the container element
|
|
17
|
+
*/
|
|
18
|
+
container: string;
|
|
19
|
+
/**
|
|
20
|
+
* Class names to apply to the list element
|
|
21
|
+
*/
|
|
22
|
+
list: string;
|
|
23
|
+
/**
|
|
24
|
+
* Class names to apply to each item element
|
|
25
|
+
*/
|
|
26
|
+
item: string;
|
|
27
|
+
};
|
|
28
|
+
export type RecommendTranslations = {
|
|
29
|
+
/**
|
|
30
|
+
* The title of the recommendation section
|
|
31
|
+
*/
|
|
32
|
+
title: string;
|
|
33
|
+
/**
|
|
34
|
+
* The label of the horizontal slider
|
|
35
|
+
*/
|
|
36
|
+
sliderLabel: string;
|
|
37
|
+
};
|
|
38
|
+
export type RecommendViewProps<TItem extends RecordWithObjectID, TTranslations extends Record<string, string>, TClassNames extends Record<string, string>> = {
|
|
39
|
+
classNames: TClassNames;
|
|
40
|
+
itemComponent: <TComponentProps extends Record<string, unknown> = Record<string, unknown>>(props: RecommendItemComponentProps<RecordWithObjectID<TItem>> & TComponentProps) => JSX.Element;
|
|
41
|
+
items: TItem[];
|
|
42
|
+
translations: TTranslations;
|
|
43
|
+
sendEvent: SendEventForHits;
|
|
44
|
+
};
|
|
45
|
+
export type RecommendComponentProps<TObject, TComponentProps extends Record<string, unknown> = Record<string, unknown>> = {
|
|
46
|
+
itemComponent?: (props: RecommendItemComponentProps<RecordWithObjectID<TObject>> & TComponentProps) => JSX.Element;
|
|
47
|
+
items: Array<RecordWithObjectID<TObject>>;
|
|
48
|
+
classNames?: Partial<RecommendClassNames>;
|
|
49
|
+
emptyComponent?: (props: TComponentProps) => JSX.Element;
|
|
50
|
+
headerComponent?: (props: RecommendInnerComponentProps<TObject> & TComponentProps) => JSX.Element;
|
|
51
|
+
status: RecommendStatus;
|
|
52
|
+
translations?: Partial<RecommendTranslations>;
|
|
53
|
+
sendEvent: SendEventForHits;
|
|
54
|
+
view?: (props: RecommendViewProps<RecordWithObjectID<TObject>, Required<RecommendTranslations>, Record<string, string>> & TComponentProps) => JSX.Element;
|
|
55
|
+
};
|
|
56
|
+
export type RecommendInnerComponentProps<TObject> = {
|
|
57
|
+
classNames: Partial<RecommendClassNames>;
|
|
58
|
+
items: TObject[];
|
|
59
|
+
translations: Partial<RecommendTranslations>;
|
|
60
|
+
};
|
|
61
|
+
export type RecordWithObjectID<TObject = Record<string, unknown>> = TObject & {
|
|
62
|
+
objectID: string;
|
|
63
|
+
__position: number;
|
|
64
|
+
__queryID?: string;
|
|
65
|
+
};
|
|
66
|
+
export type RecommendItemComponentProps<TObject> = {
|
|
67
|
+
item: TObject;
|
|
68
|
+
onClick?: () => void;
|
|
69
|
+
onAuxClick?: () => void;
|
|
70
|
+
};
|
|
71
|
+
export type RecommendStatus = 'idle' | 'loading' | 'stalled' | 'error';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/es/types/index.d.ts
CHANGED
package/dist/es/types/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type SendEventForHits = (...props: unknown[]) => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/es/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default: "0.
|
|
1
|
+
declare const _default: "0.6.0";
|
|
2
2
|
export default _default;
|
package/dist/es/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export default '0.
|
|
1
|
+
export default '0.6.0';
|