instantsearch-ui-components 0.4.0 → 0.5.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.
@@ -8,11 +8,42 @@ exports.createHitsComponent = createHitsComponent;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
10
  var _lib = require("../lib");
11
- var _excluded = ["classNames", "hits", "itemComponent", "sendEvent", "emptyComponent"];
11
+ var _excluded = ["classNames", "hits", "itemComponent", "sendEvent", "emptyComponent", "banner", "bannerComponent"];
12
12
  // Should be imported from a shared package in the future
13
13
 
14
- function createHitsComponent(_ref) {
14
+ function createDefaultBannerComponent(_ref) {
15
15
  var createElement = _ref.createElement;
16
+ return function DefaultBanner(_ref2) {
17
+ var _banner$link;
18
+ var classNames = _ref2.classNames,
19
+ banner = _ref2.banner;
20
+ if (!banner.image.urls[0].url) {
21
+ return null;
22
+ }
23
+ return createElement("aside", {
24
+ className: (0, _lib.cx)('ais-Hits-banner', classNames.bannerRoot)
25
+ }, (_banner$link = banner.link) !== null && _banner$link !== void 0 && _banner$link.url ? createElement("a", {
26
+ className: (0, _lib.cx)('ais-Hits-banner-link', classNames.bannerLink),
27
+ href: banner.link.url,
28
+ target: banner.link.target
29
+ }, createElement("img", {
30
+ className: (0, _lib.cx)('ais-Hits-banner-image', classNames.bannerImage),
31
+ src: banner.image.urls[0].url,
32
+ alt: banner.image.title
33
+ })) : createElement("img", {
34
+ className: (0, _lib.cx)('ais-Hits-banner-image', classNames.bannerImage),
35
+ src: banner.image.urls[0].url,
36
+ alt: banner.image.title
37
+ }));
38
+ };
39
+ }
40
+ function createHitsComponent(_ref3) {
41
+ var createElement = _ref3.createElement,
42
+ Fragment = _ref3.Fragment;
43
+ var DefaultBannerComponent = createDefaultBannerComponent({
44
+ createElement: createElement,
45
+ Fragment: Fragment
46
+ });
16
47
  return function Hits(userProps) {
17
48
  var _userProps$classNames = userProps.classNames,
18
49
  classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
@@ -20,15 +51,18 @@ function createHitsComponent(_ref) {
20
51
  ItemComponent = userProps.itemComponent,
21
52
  sendEvent = userProps.sendEvent,
22
53
  EmptyComponent = userProps.emptyComponent,
54
+ banner = userProps.banner,
55
+ BannerComponent = userProps.bannerComponent,
23
56
  props = (0, _objectWithoutProperties2.default)(userProps, _excluded);
24
- if (hits.length === 0 && EmptyComponent) {
25
- return createElement(EmptyComponent, {
26
- className: (0, _lib.cx)('ais-Hits', classNames.root, (0, _lib.cx)('ais-Hits--empty', classNames.emptyRoot), props.className)
27
- });
28
- }
29
57
  return createElement("div", (0, _extends2.default)({}, props, {
30
58
  className: (0, _lib.cx)('ais-Hits', classNames.root, hits.length === 0 && (0, _lib.cx)('ais-Hits--empty', classNames.emptyRoot), props.className)
31
- }), createElement("ol", {
59
+ }), banner && (BannerComponent ? createElement(BannerComponent, {
60
+ className: (0, _lib.cx)('ais-Hits-banner', classNames.bannerRoot),
61
+ banner: banner
62
+ }) : createElement(DefaultBannerComponent, {
63
+ classNames: classNames,
64
+ banner: banner
65
+ })), hits.length === 0 && EmptyComponent ? createElement(EmptyComponent, null) : createElement("ol", {
32
66
  className: (0, _lib.cx)('ais-Hits-list', classNames.list)
33
67
  }, hits.map(function (hit, index) {
34
68
  return createElement(ItemComponent, {
@@ -4,5 +4,5 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _default = '0.4.0';
7
+ var _default = '0.5.0';
8
8
  exports.default = _default;
@@ -3,6 +3,18 @@ type Hit = Record<string, unknown> & {
3
3
  objectID: string;
4
4
  };
5
5
  type SendEventForHits = (...props: unknown[]) => void;
6
+ type Banner = {
7
+ image: {
8
+ urls: Array<{
9
+ url: string;
10
+ }>;
11
+ title?: string;
12
+ };
13
+ link?: {
14
+ url?: string;
15
+ target?: '_blank' | '_self';
16
+ };
17
+ };
6
18
  export type HitsProps<THit> = ComponentProps<'div'> & {
7
19
  hits: THit[];
8
20
  itemComponent: (props: {
@@ -15,7 +27,12 @@ export type HitsProps<THit> = ComponentProps<'div'> & {
15
27
  sendEvent: SendEventForHits;
16
28
  classNames?: Partial<HitsClassNames>;
17
29
  emptyComponent?: (props: {
30
+ className?: string;
31
+ }) => JSX.Element;
32
+ banner?: Banner;
33
+ bannerComponent?: (props: {
18
34
  className: string;
35
+ banner: Banner;
19
36
  }) => JSX.Element;
20
37
  };
21
38
  export type HitsClassNames = {
@@ -35,6 +52,18 @@ export type HitsClassNames = {
35
52
  * Class names to apply to each item element
36
53
  */
37
54
  item: string | string[];
55
+ /**
56
+ * Class names to apply to the banner element
57
+ */
58
+ bannerRoot: string | string[];
59
+ /**
60
+ * Class names to apply to the banner image element
61
+ */
62
+ bannerImage: string | string[];
63
+ /**
64
+ * Class names to apply to the banner link element
65
+ */
66
+ bannerLink: string | string[];
38
67
  };
39
- export declare function createHitsComponent({ createElement }: Renderer): <THit extends Hit>(userProps: HitsProps<THit>) => JSX.Element;
68
+ export declare function createHitsComponent({ createElement, Fragment }: Renderer): <THit extends Hit>(userProps: HitsProps<THit>) => JSX.Element;
40
69
  export {};
@@ -1,12 +1,43 @@
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
- export function createHitsComponent(_ref) {
8
+ function createDefaultBannerComponent(_ref) {
9
9
  var createElement = _ref.createElement;
10
+ return function DefaultBanner(_ref2) {
11
+ var _banner$link;
12
+ var classNames = _ref2.classNames,
13
+ banner = _ref2.banner;
14
+ if (!banner.image.urls[0].url) {
15
+ return null;
16
+ }
17
+ return createElement("aside", {
18
+ className: cx('ais-Hits-banner', classNames.bannerRoot)
19
+ }, (_banner$link = banner.link) !== null && _banner$link !== void 0 && _banner$link.url ? createElement("a", {
20
+ className: cx('ais-Hits-banner-link', classNames.bannerLink),
21
+ href: banner.link.url,
22
+ target: banner.link.target
23
+ }, createElement("img", {
24
+ className: cx('ais-Hits-banner-image', classNames.bannerImage),
25
+ src: banner.image.urls[0].url,
26
+ alt: banner.image.title
27
+ })) : createElement("img", {
28
+ className: cx('ais-Hits-banner-image', classNames.bannerImage),
29
+ src: banner.image.urls[0].url,
30
+ alt: banner.image.title
31
+ }));
32
+ };
33
+ }
34
+ export function createHitsComponent(_ref3) {
35
+ var createElement = _ref3.createElement,
36
+ Fragment = _ref3.Fragment;
37
+ var DefaultBannerComponent = createDefaultBannerComponent({
38
+ createElement: createElement,
39
+ Fragment: Fragment
40
+ });
10
41
  return function Hits(userProps) {
11
42
  var _userProps$classNames = userProps.classNames,
12
43
  classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,
@@ -14,15 +45,18 @@ export function createHitsComponent(_ref) {
14
45
  ItemComponent = userProps.itemComponent,
15
46
  sendEvent = userProps.sendEvent,
16
47
  EmptyComponent = userProps.emptyComponent,
48
+ banner = userProps.banner,
49
+ BannerComponent = userProps.bannerComponent,
17
50
  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
51
  return createElement("div", _extends({}, props, {
24
52
  className: cx('ais-Hits', classNames.root, hits.length === 0 && cx('ais-Hits--empty', classNames.emptyRoot), props.className)
25
- }), createElement("ol", {
53
+ }), banner && (BannerComponent ? createElement(BannerComponent, {
54
+ className: cx('ais-Hits-banner', classNames.bannerRoot),
55
+ banner: banner
56
+ }) : createElement(DefaultBannerComponent, {
57
+ classNames: classNames,
58
+ banner: banner
59
+ })), hits.length === 0 && EmptyComponent ? createElement(EmptyComponent, null) : createElement("ol", {
26
60
  className: cx('ais-Hits-list', classNames.list)
27
61
  }, hits.map(function (hit, index) {
28
62
  return createElement(ItemComponent, {
@@ -1,2 +1,2 @@
1
- declare const _default: "0.4.0";
1
+ declare const _default: "0.5.0";
2
2
  export default _default;
@@ -1 +1 @@
1
- export default '0.4.0';
1
+ export default '0.5.0';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instantsearch-ui-components",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Common UI components for InstantSearch.",
5
5
  "types": "dist/es/index.d.ts",
6
6
  "main": "dist/cjs/index.js",
@@ -49,5 +49,5 @@
49
49
  "dependencies": {
50
50
  "@babel/runtime": "^7.1.2"
51
51
  },
52
- "gitHead": "358f849cba15cbbb415da05feb582b47358aa239"
52
+ "gitHead": "68fe2ee8544096eff8c2fbafe01a50a8acbca2b9"
53
53
  }