@blaze-cms/react-page-builder 0.141.0-core-styles.16 → 0.141.0-core-styles.20
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 +11 -0
- package/lib/variants/ThumbnailCarousel/ThumbnailCarousel.js +65 -0
- package/lib/variants/ThumbnailCarousel/ThumbnailCarousel.js.map +1 -0
- package/lib/variants/ThumbnailCarousel/ThumbnailImage/ThumbnailImage.js +41 -0
- package/lib/variants/ThumbnailCarousel/ThumbnailImage/ThumbnailImage.js.map +1 -0
- package/lib/variants/ThumbnailCarousel/ThumbnailImage/index.js +11 -0
- package/lib/variants/ThumbnailCarousel/ThumbnailImage/index.js.map +1 -0
- package/lib/variants/ThumbnailCarousel/ThumbnailImage/useThumbnailImage.js +82 -0
- package/lib/variants/ThumbnailCarousel/ThumbnailImage/useThumbnailImage.js.map +1 -0
- package/lib/variants/ThumbnailCarousel/index.js +29 -0
- package/lib/variants/ThumbnailCarousel/index.js.map +1 -0
- package/lib/variants/ThumbnailCarousel/useThumbnailCarousel.js +62 -0
- package/lib/variants/ThumbnailCarousel/useThumbnailCarousel.js.map +1 -0
- package/lib/variants/index.js +5 -1
- package/lib/variants/index.js.map +1 -1
- package/lib-es/variants/ThumbnailCarousel/ThumbnailCarousel.js +51 -0
- package/lib-es/variants/ThumbnailCarousel/ThumbnailCarousel.js.map +1 -0
- package/lib-es/variants/ThumbnailCarousel/ThumbnailImage/ThumbnailImage.js +34 -0
- package/lib-es/variants/ThumbnailCarousel/ThumbnailImage/ThumbnailImage.js.map +1 -0
- package/lib-es/variants/ThumbnailCarousel/ThumbnailImage/index.js +3 -0
- package/lib-es/variants/ThumbnailCarousel/ThumbnailImage/index.js.map +1 -0
- package/lib-es/variants/ThumbnailCarousel/ThumbnailImage/useThumbnailImage.js +75 -0
- package/lib-es/variants/ThumbnailCarousel/ThumbnailImage/useThumbnailImage.js.map +1 -0
- package/lib-es/variants/ThumbnailCarousel/index.js +10 -0
- package/lib-es/variants/ThumbnailCarousel/index.js.map +1 -0
- package/lib-es/variants/ThumbnailCarousel/useThumbnailCarousel.js +42 -0
- package/lib-es/variants/ThumbnailCarousel/useThumbnailCarousel.js.map +1 -0
- package/lib-es/variants/index.js +4 -1
- package/lib-es/variants/index.js.map +1 -1
- package/package.json +2 -2
- package/src/variants/ThumbnailCarousel/ThumbnailCarousel.js +55 -0
- package/src/variants/ThumbnailCarousel/ThumbnailImage/ThumbnailImage.js +40 -0
- package/src/variants/ThumbnailCarousel/ThumbnailImage/index.js +3 -0
- package/src/variants/ThumbnailCarousel/ThumbnailImage/useThumbnailImage.js +75 -0
- package/src/variants/ThumbnailCarousel/index.js +10 -0
- package/src/variants/ThumbnailCarousel/useThumbnailCarousel.js +37 -0
- package/src/variants/index.js +5 -1
- package/tests/unit/src/variants/ThumbnailCarousel/ThumbnailCarousel.test.js +29 -0
- package/tests/unit/src/variants/ThumbnailCarousel/ThumbnailImage.test.js +45 -0
- package/tests/unit/src/variants/ThumbnailCarousel/__snapshots__/ThumbnailCarousel.test.js.snap +76 -0
- package/tests/unit/src/variants/ThumbnailCarousel/__snapshots__/ThumbnailImage.test.js.snap +19 -0
- package/tests/unit/src/variants/ThumbnailCarousel/mocks.js +64 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [0.141.0-core-styles.20](https://github.com/thebyte9/blaze/compare/v0.141.0-core-styles.19...v0.141.0-core-styles.20) (2024-05-01)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* added thumbnail carousel variant ([#4343](https://github.com/thebyte9/blaze/issues/4343)) ([69beb66](https://github.com/thebyte9/blaze/commit/69beb66445c35f3ff67d5002aa96fe60aa8cae50))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
# [0.141.0-core-styles.16](https://github.com/thebyte9/blaze/compare/v0.141.0-core-styles.15...v0.141.0-core-styles.16) (2024-04-25)
|
|
7
18
|
|
|
8
19
|
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.object.define-property.js");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
require("core-js/modules/es.array.map.js");
|
|
10
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
+
var _react = _interopRequireDefault(require("react"));
|
|
12
|
+
var _useThumbnailCarousel2 = _interopRequireDefault(require("./useThumbnailCarousel"));
|
|
13
|
+
var _ThumbnailImage = _interopRequireDefault(require("./ThumbnailImage"));
|
|
14
|
+
var ThumbnailCarousel = function ThumbnailCarousel(props) {
|
|
15
|
+
var _useThumbnailCarousel = (0, _useThumbnailCarousel2["default"])(props),
|
|
16
|
+
thumbnailsListRef = _useThumbnailCarousel.thumbnailsListRef,
|
|
17
|
+
imageIds = _useThumbnailCarousel.imageIds,
|
|
18
|
+
selectedImageId = _useThumbnailCarousel.selectedImageId,
|
|
19
|
+
priorityLimit = _useThumbnailCarousel.priorityLimit,
|
|
20
|
+
mainImageButtonClick = _useThumbnailCarousel.mainImageButtonClick,
|
|
21
|
+
thumbnailImageClick = _useThumbnailCarousel.thumbnailImageClick;
|
|
22
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
23
|
+
className: "thumbnail-carousel",
|
|
24
|
+
"data-testid": "thumbnail-carousel"
|
|
25
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
26
|
+
className: "thumbnail-carousel__main_image_container"
|
|
27
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
28
|
+
id: "previous-button",
|
|
29
|
+
className: "thumbnail-carousel__main_image_container__button",
|
|
30
|
+
role: "button",
|
|
31
|
+
onClick: function onClick() {
|
|
32
|
+
return mainImageButtonClick();
|
|
33
|
+
}
|
|
34
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
35
|
+
className: "arrow arrow--left"
|
|
36
|
+
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
37
|
+
className: "thumbnail-carousel__main_image_container__main-image",
|
|
38
|
+
"data-testid": "thumbnail-main-image",
|
|
39
|
+
ref: thumbnailsListRef
|
|
40
|
+
}, /*#__PURE__*/_react["default"].createElement(_ThumbnailImage["default"], (0, _extends2["default"])({}, props, {
|
|
41
|
+
priority: true,
|
|
42
|
+
imageId: selectedImageId
|
|
43
|
+
}))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
44
|
+
id: "next-button",
|
|
45
|
+
className: "thumbnail-carousel__main_image_container__button next",
|
|
46
|
+
role: "button",
|
|
47
|
+
onClick: function onClick() {
|
|
48
|
+
return mainImageButtonClick(true);
|
|
49
|
+
}
|
|
50
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
51
|
+
className: "arrow arrow--right"
|
|
52
|
+
}))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
53
|
+
className: "thumbnail-carousel__list"
|
|
54
|
+
}, imageIds.map(function (imageId, index) {
|
|
55
|
+
return /*#__PURE__*/_react["default"].createElement(_ThumbnailImage["default"], (0, _extends2["default"])({}, props, {
|
|
56
|
+
key: imageId,
|
|
57
|
+
priority: index < priorityLimit,
|
|
58
|
+
imageId: imageId,
|
|
59
|
+
selectedImageId: selectedImageId,
|
|
60
|
+
handleOnClick: thumbnailImageClick
|
|
61
|
+
}));
|
|
62
|
+
})));
|
|
63
|
+
};
|
|
64
|
+
var _default = exports["default"] = ThumbnailCarousel;
|
|
65
|
+
//# sourceMappingURL=ThumbnailCarousel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThumbnailCarousel.js","names":["_react","_interopRequireDefault","require","_useThumbnailCarousel2","_ThumbnailImage","ThumbnailCarousel","props","_useThumbnailCarousel","useThumbnailCarousel","thumbnailsListRef","imageIds","selectedImageId","priorityLimit","mainImageButtonClick","thumbnailImageClick","createElement","className","id","role","onClick","ref","_extends2","priority","imageId","map","index","key","handleOnClick","_default","exports"],"sources":["../../../src/variants/ThumbnailCarousel/ThumbnailCarousel.js"],"sourcesContent":["import React from 'react';\nimport useThumbnailCarousel from './useThumbnailCarousel';\nimport ThumbnailImage from './ThumbnailImage';\n\nconst ThumbnailCarousel = props => {\n const {\n thumbnailsListRef,\n imageIds,\n selectedImageId,\n priorityLimit,\n mainImageButtonClick,\n thumbnailImageClick\n } = useThumbnailCarousel(props);\n\n return (\n <div className=\"thumbnail-carousel\" data-testid=\"thumbnail-carousel\">\n <div className=\"thumbnail-carousel__main_image_container\">\n <div\n id=\"previous-button\"\n className=\"thumbnail-carousel__main_image_container__button\"\n role=\"button\"\n onClick={() => mainImageButtonClick()}>\n <div className=\"arrow arrow--left\" />\n </div>\n <div\n className=\"thumbnail-carousel__main_image_container__main-image\"\n data-testid=\"thumbnail-main-image\"\n ref={thumbnailsListRef}>\n <ThumbnailImage {...props} priority imageId={selectedImageId} />\n </div>\n <div\n id=\"next-button\"\n className=\"thumbnail-carousel__main_image_container__button next\"\n role=\"button\"\n onClick={() => mainImageButtonClick(true)}>\n <div className=\"arrow arrow--right\" />\n </div>\n </div>\n <div className=\"thumbnail-carousel__list\">\n {imageIds.map((imageId, index) => (\n <ThumbnailImage\n {...props}\n key={imageId}\n priority={index < priorityLimit}\n imageId={imageId}\n selectedImageId={selectedImageId}\n handleOnClick={thumbnailImageClick}\n />\n ))}\n </div>\n </div>\n );\n};\n\nexport default ThumbnailCarousel;\n"],"mappings":";;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,eAAA,GAAAH,sBAAA,CAAAC,OAAA;AAEA,IAAMG,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAGC,KAAK,EAAI;EACjC,IAAAC,qBAAA,GAOI,IAAAC,iCAAoB,EAACF,KAAK,CAAC;IAN7BG,iBAAiB,GAAAF,qBAAA,CAAjBE,iBAAiB;IACjBC,QAAQ,GAAAH,qBAAA,CAARG,QAAQ;IACRC,eAAe,GAAAJ,qBAAA,CAAfI,eAAe;IACfC,aAAa,GAAAL,qBAAA,CAAbK,aAAa;IACbC,oBAAoB,GAAAN,qBAAA,CAApBM,oBAAoB;IACpBC,mBAAmB,GAAAP,qBAAA,CAAnBO,mBAAmB;EAGrB,oBACEd,MAAA,YAAAe,aAAA;IAAKC,SAAS,EAAC,oBAAoB;IAAC,eAAY;EAAoB,gBAClEhB,MAAA,YAAAe,aAAA;IAAKC,SAAS,EAAC;EAA0C,gBACvDhB,MAAA,YAAAe,aAAA;IACEE,EAAE,EAAC,iBAAiB;IACpBD,SAAS,EAAC,kDAAkD;IAC5DE,IAAI,EAAC,QAAQ;IACbC,OAAO,EAAE,SAAAA,QAAA;MAAA,OAAMN,oBAAoB,CAAC,CAAC;IAAA;EAAC,gBACtCb,MAAA,YAAAe,aAAA;IAAKC,SAAS,EAAC;EAAmB,CAAE,CACjC,CAAC,eACNhB,MAAA,YAAAe,aAAA;IACEC,SAAS,EAAC,sDAAsD;IAChE,eAAY,sBAAsB;IAClCI,GAAG,EAAEX;EAAkB,gBACvBT,MAAA,YAAAe,aAAA,CAACX,eAAA,WAAc,MAAAiB,SAAA,iBAAKf,KAAK;IAAEgB,QAAQ;IAACC,OAAO,EAAEZ;EAAgB,EAAE,CAC5D,CAAC,eACNX,MAAA,YAAAe,aAAA;IACEE,EAAE,EAAC,aAAa;IAChBD,SAAS,EAAC,uDAAuD;IACjEE,IAAI,EAAC,QAAQ;IACbC,OAAO,EAAE,SAAAA,QAAA;MAAA,OAAMN,oBAAoB,CAAC,IAAI,CAAC;IAAA;EAAC,gBAC1Cb,MAAA,YAAAe,aAAA;IAAKC,SAAS,EAAC;EAAoB,CAAE,CAClC,CACF,CAAC,eACNhB,MAAA,YAAAe,aAAA;IAAKC,SAAS,EAAC;EAA0B,GACtCN,QAAQ,CAACc,GAAG,CAAC,UAACD,OAAO,EAAEE,KAAK;IAAA,oBAC3BzB,MAAA,YAAAe,aAAA,CAACX,eAAA,WAAc,MAAAiB,SAAA,iBACTf,KAAK;MACToB,GAAG,EAAEH,OAAQ;MACbD,QAAQ,EAAEG,KAAK,GAAGb,aAAc;MAChCW,OAAO,EAAEA,OAAQ;MACjBZ,eAAe,EAAEA,eAAgB;MACjCgB,aAAa,EAAEb;IAAoB,EACpC,CAAC;EAAA,CACH,CACE,CACF,CAAC;AAEV,CAAC;AAAC,IAAAc,QAAA,GAAAC,OAAA,cAEaxB,iBAAiB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.object.define-property.js");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
|
10
|
+
var _LazyImage = _interopRequireDefault(require("../../../components/LazyImage"));
|
|
11
|
+
var _useThumbnailImage2 = _interopRequireDefault(require("./useThumbnailImage"));
|
|
12
|
+
var ThumbnailImage = function ThumbnailImage(props) {
|
|
13
|
+
var _useThumbnailImage = (0, _useThumbnailImage2["default"])(props),
|
|
14
|
+
loading = _useThumbnailImage.loading,
|
|
15
|
+
error = _useThumbnailImage.error,
|
|
16
|
+
className = _useThumbnailImage.className,
|
|
17
|
+
imageRef = _useThumbnailImage.imageRef,
|
|
18
|
+
imageUrl = _useThumbnailImage.imageUrl,
|
|
19
|
+
altText = _useThumbnailImage.altText,
|
|
20
|
+
priority = _useThumbnailImage.priority,
|
|
21
|
+
handleClick = _useThumbnailImage.handleClick,
|
|
22
|
+
handleEnableLightbox = _useThumbnailImage.handleEnableLightbox;
|
|
23
|
+
if (error) return error.message;
|
|
24
|
+
if (loading) return null;
|
|
25
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
26
|
+
ref: imageRef,
|
|
27
|
+
className: className,
|
|
28
|
+
onClick: handleClick,
|
|
29
|
+
role: "button",
|
|
30
|
+
"data-testid": "thumbnail-image"
|
|
31
|
+
}, /*#__PURE__*/_react["default"].createElement(_LazyImage["default"], {
|
|
32
|
+
src: imageUrl,
|
|
33
|
+
alt: altText,
|
|
34
|
+
sizeKey: "carousel",
|
|
35
|
+
onClick: handleEnableLightbox,
|
|
36
|
+
role: "button",
|
|
37
|
+
priority: priority
|
|
38
|
+
}));
|
|
39
|
+
};
|
|
40
|
+
var _default = exports["default"] = ThumbnailImage;
|
|
41
|
+
//# sourceMappingURL=ThumbnailImage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThumbnailImage.js","names":["_react","_interopRequireDefault","require","_LazyImage","_useThumbnailImage2","ThumbnailImage","props","_useThumbnailImage","useThumbnailImage","loading","error","className","imageRef","imageUrl","altText","priority","handleClick","handleEnableLightbox","message","createElement","ref","onClick","role","src","alt","sizeKey","_default","exports"],"sources":["../../../../src/variants/ThumbnailCarousel/ThumbnailImage/ThumbnailImage.js"],"sourcesContent":["import React from 'react';\nimport LazyImage from '../../../components/LazyImage';\nimport useThumbnailImage from './useThumbnailImage';\n\nconst ThumbnailImage = props => {\n const {\n loading,\n error,\n className,\n imageRef,\n imageUrl,\n altText,\n priority,\n handleClick,\n handleEnableLightbox\n } = useThumbnailImage(props);\n\n if (error) return error.message;\n if (loading) return null;\n\n return (\n <div\n ref={imageRef}\n className={className}\n onClick={handleClick}\n role=\"button\"\n data-testid=\"thumbnail-image\">\n <LazyImage\n src={imageUrl}\n alt={altText}\n sizeKey=\"carousel\"\n onClick={handleEnableLightbox}\n role=\"button\"\n priority={priority}\n />\n </div>\n );\n};\n\nexport default ThumbnailImage;\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,mBAAA,GAAAH,sBAAA,CAAAC,OAAA;AAEA,IAAMG,cAAc,GAAG,SAAjBA,cAAcA,CAAGC,KAAK,EAAI;EAC9B,IAAAC,kBAAA,GAUI,IAAAC,8BAAiB,EAACF,KAAK,CAAC;IAT1BG,OAAO,GAAAF,kBAAA,CAAPE,OAAO;IACPC,KAAK,GAAAH,kBAAA,CAALG,KAAK;IACLC,SAAS,GAAAJ,kBAAA,CAATI,SAAS;IACTC,QAAQ,GAAAL,kBAAA,CAARK,QAAQ;IACRC,QAAQ,GAAAN,kBAAA,CAARM,QAAQ;IACRC,OAAO,GAAAP,kBAAA,CAAPO,OAAO;IACPC,QAAQ,GAAAR,kBAAA,CAARQ,QAAQ;IACRC,WAAW,GAAAT,kBAAA,CAAXS,WAAW;IACXC,oBAAoB,GAAAV,kBAAA,CAApBU,oBAAoB;EAGtB,IAAIP,KAAK,EAAE,OAAOA,KAAK,CAACQ,OAAO;EAC/B,IAAIT,OAAO,EAAE,OAAO,IAAI;EAExB,oBACET,MAAA,YAAAmB,aAAA;IACEC,GAAG,EAAER,QAAS;IACdD,SAAS,EAAEA,SAAU;IACrBU,OAAO,EAAEL,WAAY;IACrBM,IAAI,EAAC,QAAQ;IACb,eAAY;EAAiB,gBAC7BtB,MAAA,YAAAmB,aAAA,CAAChB,UAAA,WAAS;IACRoB,GAAG,EAAEV,QAAS;IACdW,GAAG,EAAEV,OAAQ;IACbW,OAAO,EAAC,UAAU;IAClBJ,OAAO,EAAEJ,oBAAqB;IAC9BK,IAAI,EAAC,QAAQ;IACbP,QAAQ,EAAEA;EAAS,CACpB,CACE,CAAC;AAEV,CAAC;AAAC,IAAAW,QAAA,GAAAC,OAAA,cAEatB,cAAc"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.object.define-property.js");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
var _ThumbnailImage = _interopRequireDefault(require("./ThumbnailImage"));
|
|
10
|
+
var _default = exports["default"] = _ThumbnailImage["default"];
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_ThumbnailImage","_interopRequireDefault","require","_default","exports","ThumbnailImage"],"sources":["../../../../src/variants/ThumbnailCarousel/ThumbnailImage/index.js"],"sourcesContent":["import ThumbnailImage from './ThumbnailImage';\n\nexport default ThumbnailImage;\n"],"mappings":";;;;;;;;AAAA,IAAAA,eAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA8C,IAAAC,QAAA,GAAAC,OAAA,cAE/BC,0BAAc"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.object.define-property.js");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
var _react = require("react");
|
|
10
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
+
var _hooks = require("../../../hooks");
|
|
12
|
+
var _utils = require("../../../utils");
|
|
13
|
+
var useThumbnailImage = function useThumbnailImage(_ref) {
|
|
14
|
+
var imageId = _ref.imageId,
|
|
15
|
+
enableLightbox = _ref.enableLightbox,
|
|
16
|
+
toggleModal = _ref.toggleModal,
|
|
17
|
+
handleSelectedImage = _ref.handleSelectedImage,
|
|
18
|
+
priority = _ref.priority,
|
|
19
|
+
selectedImageId = _ref.selectedImageId,
|
|
20
|
+
handleOnClick = _ref.handleOnClick;
|
|
21
|
+
var imageRef = (0, _react.useRef)(null);
|
|
22
|
+
var isSelected = selectedImageId === imageId;
|
|
23
|
+
var _useGetImages = (0, _hooks.useGetImages)(imageId),
|
|
24
|
+
_useGetImages$data = _useGetImages.data,
|
|
25
|
+
data = _useGetImages$data === void 0 ? {} : _useGetImages$data,
|
|
26
|
+
loading = _useGetImages.loading,
|
|
27
|
+
error = _useGetImages.error;
|
|
28
|
+
(0, _react.useEffect)(function () {
|
|
29
|
+
if (imageRef.current && isSelected) {
|
|
30
|
+
imageRef.current.scrollIntoView({
|
|
31
|
+
behavior: 'smooth',
|
|
32
|
+
block: 'start'
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}, [isSelected]);
|
|
36
|
+
var handleEnableLightbox = function handleEnableLightbox() {
|
|
37
|
+
if (!enableLightbox) return;
|
|
38
|
+
toggleModal();
|
|
39
|
+
handleSelectedImage(imageId);
|
|
40
|
+
};
|
|
41
|
+
var handleClick = function handleClick() {
|
|
42
|
+
handleOnClick(imageId);
|
|
43
|
+
};
|
|
44
|
+
var _ref2 = data.getFile || {
|
|
45
|
+
getFile: {
|
|
46
|
+
url: '',
|
|
47
|
+
data: {}
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
_ref2$url = _ref2.url,
|
|
51
|
+
imageUrl = _ref2$url === void 0 ? '' : _ref2$url,
|
|
52
|
+
_ref2$data = _ref2.data,
|
|
53
|
+
imageData = _ref2$data === void 0 ? {} : _ref2$data;
|
|
54
|
+
var _getImageData = (0, _utils.getImageData)({}, imageData),
|
|
55
|
+
altText = _getImageData.altText;
|
|
56
|
+
var className = selectedImageId === imageId ? 'thumbnail-carousel-image thumbnail-carousel-image--selected' : 'thumbnail-carousel-image';
|
|
57
|
+
return {
|
|
58
|
+
loading: loading,
|
|
59
|
+
error: error,
|
|
60
|
+
className: className,
|
|
61
|
+
imageRef: imageRef,
|
|
62
|
+
imageUrl: imageUrl,
|
|
63
|
+
altText: altText,
|
|
64
|
+
priority: priority,
|
|
65
|
+
handleClick: handleClick,
|
|
66
|
+
handleEnableLightbox: handleEnableLightbox
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
useThumbnailImage.propTypes = {
|
|
70
|
+
imageId: _propTypes["default"].string.isRequired,
|
|
71
|
+
selectedImageId: _propTypes["default"].string.isRequired,
|
|
72
|
+
enableLightbox: _propTypes["default"].bool.isRequired,
|
|
73
|
+
toggleModal: _propTypes["default"].func.isRequired,
|
|
74
|
+
handleSelectedImage: _propTypes["default"].func.isRequired,
|
|
75
|
+
priority: _propTypes["default"].bool.isRequired,
|
|
76
|
+
handleOnClick: _propTypes["default"].func
|
|
77
|
+
};
|
|
78
|
+
useThumbnailImage.defaultProps = {
|
|
79
|
+
handleOnClick: function handleOnClick() {}
|
|
80
|
+
};
|
|
81
|
+
var _default = exports["default"] = useThumbnailImage;
|
|
82
|
+
//# sourceMappingURL=useThumbnailImage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useThumbnailImage.js","names":["_react","require","_propTypes","_interopRequireDefault","_hooks","_utils","useThumbnailImage","_ref","imageId","enableLightbox","toggleModal","handleSelectedImage","priority","selectedImageId","handleOnClick","imageRef","useRef","isSelected","_useGetImages","useGetImages","_useGetImages$data","data","loading","error","useEffect","current","scrollIntoView","behavior","block","handleEnableLightbox","handleClick","_ref2","getFile","url","_ref2$url","imageUrl","_ref2$data","imageData","_getImageData","getImageData","altText","className","propTypes","PropTypes","string","isRequired","bool","func","defaultProps","_default","exports"],"sources":["../../../../src/variants/ThumbnailCarousel/ThumbnailImage/useThumbnailImage.js"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { useGetImages } from '../../../hooks';\nimport { getImageData } from '../../../utils';\n\nconst useThumbnailImage = ({\n imageId,\n enableLightbox,\n toggleModal,\n handleSelectedImage,\n priority,\n selectedImageId,\n handleOnClick\n}) => {\n const imageRef = useRef(null);\n const isSelected = selectedImageId === imageId;\n const { data = {}, loading, error } = useGetImages(imageId);\n\n useEffect(\n () => {\n if (imageRef.current && isSelected) {\n imageRef.current.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n },\n [isSelected]\n );\n\n const handleEnableLightbox = () => {\n if (!enableLightbox) return;\n toggleModal();\n handleSelectedImage(imageId);\n };\n\n const handleClick = () => {\n handleOnClick(imageId);\n };\n\n const { url: imageUrl = '', data: imageData = {} } = data.getFile || {\n getFile: { url: '', data: {} }\n };\n const { altText } = getImageData({}, imageData);\n\n const className =\n selectedImageId === imageId\n ? 'thumbnail-carousel-image thumbnail-carousel-image--selected'\n : 'thumbnail-carousel-image';\n\n return {\n loading,\n error,\n className,\n imageRef,\n imageUrl,\n altText,\n priority,\n handleClick,\n handleEnableLightbox\n };\n};\n\nuseThumbnailImage.propTypes = {\n imageId: PropTypes.string.isRequired,\n selectedImageId: PropTypes.string.isRequired,\n enableLightbox: PropTypes.bool.isRequired,\n toggleModal: PropTypes.func.isRequired,\n handleSelectedImage: PropTypes.func.isRequired,\n priority: PropTypes.bool.isRequired,\n handleOnClick: PropTypes.func\n};\n\nuseThumbnailImage.defaultProps = {\n handleOnClick: () => {}\n};\n\nexport default useThumbnailImage;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.object.keys.js");
|
|
4
|
+
require("core-js/modules/es.symbol.js");
|
|
5
|
+
require("core-js/modules/es.array.filter.js");
|
|
6
|
+
require("core-js/modules/es.object.to-string.js");
|
|
7
|
+
require("core-js/modules/es.object.get-own-property-descriptor.js");
|
|
8
|
+
require("core-js/modules/es.array.for-each.js");
|
|
9
|
+
require("core-js/modules/web.dom-collections.for-each.js");
|
|
10
|
+
require("core-js/modules/es.object.get-own-property-descriptors.js");
|
|
11
|
+
require("core-js/modules/es.object.define-properties.js");
|
|
12
|
+
require("core-js/modules/es.object.define-property.js");
|
|
13
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
14
|
+
Object.defineProperty(exports, "__esModule", {
|
|
15
|
+
value: true
|
|
16
|
+
});
|
|
17
|
+
exports["default"] = void 0;
|
|
18
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
19
|
+
var _ThumbnailCarousel = _interopRequireDefault(require("./ThumbnailCarousel"));
|
|
20
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
21
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
22
|
+
var ThumbnailCarousel = {
|
|
23
|
+
getSettings: function getSettings(componentSettings) {
|
|
24
|
+
return _objectSpread({}, componentSettings);
|
|
25
|
+
},
|
|
26
|
+
VariantComponent: _ThumbnailCarousel["default"]
|
|
27
|
+
};
|
|
28
|
+
var _default = exports["default"] = ThumbnailCarousel;
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_ThumbnailCarousel","_interopRequireDefault","require","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","ThumbnailCarousel","getSettings","componentSettings","VariantComponent","ThumbnailCarouselComponent","_default","exports"],"sources":["../../../src/variants/ThumbnailCarousel/index.js"],"sourcesContent":["import ThumbnailCarouselComponent from './ThumbnailCarousel';\n\nconst ThumbnailCarousel = {\n getSettings: componentSettings => ({\n ...componentSettings\n }),\n VariantComponent: ThumbnailCarouselComponent\n};\n\nexport default ThumbnailCarousel;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,IAAAA,kBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6D,SAAAC,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,OAAAG,MAAA,CAAAE,qBAAA,QAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,GAAAC,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAN,CAAA,WAAAE,MAAA,CAAAK,wBAAA,CAAAR,CAAA,EAAAC,CAAA,EAAAQ,UAAA,OAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAU,cAAAZ,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,UAAAC,CAAA,WAAAW,SAAA,CAAAZ,CAAA,IAAAY,SAAA,CAAAZ,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,aAAAhB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,EAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,EAAAC,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAE7D,IAAMoB,iBAAiB,GAAG;EACxBC,WAAW,EAAE,SAAAA,YAAAC,iBAAiB;IAAA,OAAAV,aAAA,KACzBU,iBAAiB;EAAA,CACpB;EACFC,gBAAgB,EAAEC;AACpB,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,cAEaN,iBAAiB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.object.keys.js");
|
|
4
|
+
require("core-js/modules/es.symbol.js");
|
|
5
|
+
require("core-js/modules/es.array.filter.js");
|
|
6
|
+
require("core-js/modules/es.object.to-string.js");
|
|
7
|
+
require("core-js/modules/es.object.get-own-property-descriptor.js");
|
|
8
|
+
require("core-js/modules/es.array.for-each.js");
|
|
9
|
+
require("core-js/modules/web.dom-collections.for-each.js");
|
|
10
|
+
require("core-js/modules/es.object.get-own-property-descriptors.js");
|
|
11
|
+
require("core-js/modules/es.object.define-properties.js");
|
|
12
|
+
require("core-js/modules/es.object.define-property.js");
|
|
13
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
14
|
+
Object.defineProperty(exports, "__esModule", {
|
|
15
|
+
value: true
|
|
16
|
+
});
|
|
17
|
+
exports["default"] = void 0;
|
|
18
|
+
require("core-js/modules/es.array.index-of.js");
|
|
19
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
20
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
21
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
22
|
+
var _react = require("react");
|
|
23
|
+
var _excluded = ["imageIds", "priorityLimit"];
|
|
24
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
25
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
26
|
+
var useThumbnailCarousel = function useThumbnailCarousel(_ref) {
|
|
27
|
+
var imageIds = _ref.imageIds,
|
|
28
|
+
priorityLimit = _ref.priorityLimit,
|
|
29
|
+
props = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
|
|
30
|
+
var _useState = (0, _react.useState)(0),
|
|
31
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
32
|
+
selectedImageIndex = _useState2[0],
|
|
33
|
+
setSelectedImageIndex = _useState2[1];
|
|
34
|
+
var thumbnailsListRef = (0, _react.useRef)(null);
|
|
35
|
+
var selectedImageId = imageIds[selectedImageIndex];
|
|
36
|
+
var mainImageButtonClick = function mainImageButtonClick(next) {
|
|
37
|
+
if (next) {
|
|
38
|
+
var isLast = imageIds.length - 1 === selectedImageIndex;
|
|
39
|
+
var newIndex = isLast ? 0 : selectedImageIndex + 1;
|
|
40
|
+
setSelectedImageIndex(newIndex);
|
|
41
|
+
} else {
|
|
42
|
+
var isFirst = selectedImageIndex === 0;
|
|
43
|
+
var _newIndex = isFirst ? imageIds.length - 1 : selectedImageIndex - 1;
|
|
44
|
+
setSelectedImageIndex(_newIndex);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
var thumbnailImageClick = function thumbnailImageClick(id) {
|
|
48
|
+
var newIndex = imageIds.indexOf(id);
|
|
49
|
+
if (newIndex !== -1) setSelectedImageIndex(newIndex);
|
|
50
|
+
};
|
|
51
|
+
return _objectSpread(_objectSpread({}, props), {}, {
|
|
52
|
+
imageIds: imageIds,
|
|
53
|
+
selectedImageId: selectedImageId,
|
|
54
|
+
selectedImageIndex: selectedImageIndex,
|
|
55
|
+
thumbnailsListRef: thumbnailsListRef,
|
|
56
|
+
priorityLimit: priorityLimit,
|
|
57
|
+
thumbnailImageClick: thumbnailImageClick,
|
|
58
|
+
mainImageButtonClick: mainImageButtonClick
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
var _default = exports["default"] = useThumbnailCarousel;
|
|
62
|
+
//# sourceMappingURL=useThumbnailCarousel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useThumbnailCarousel.js","names":["_react","require","_excluded","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","useThumbnailCarousel","_ref","imageIds","priorityLimit","props","_objectWithoutProperties2","_useState","useState","_useState2","_slicedToArray2","selectedImageIndex","setSelectedImageIndex","thumbnailsListRef","useRef","selectedImageId","mainImageButtonClick","next","isLast","newIndex","isFirst","thumbnailImageClick","id","indexOf","_default","exports"],"sources":["../../../src/variants/ThumbnailCarousel/useThumbnailCarousel.js"],"sourcesContent":["import { useState, useRef } from 'react';\n\nconst useThumbnailCarousel = ({ imageIds, priorityLimit, ...props }) => {\n const [selectedImageIndex, setSelectedImageIndex] = useState(0);\n const thumbnailsListRef = useRef(null);\n const selectedImageId = imageIds[selectedImageIndex];\n\n const mainImageButtonClick = next => {\n if (next) {\n const isLast = imageIds.length - 1 === selectedImageIndex;\n const newIndex = isLast ? 0 : selectedImageIndex + 1;\n setSelectedImageIndex(newIndex);\n } else {\n const isFirst = selectedImageIndex === 0;\n const newIndex = isFirst ? imageIds.length - 1 : selectedImageIndex - 1;\n setSelectedImageIndex(newIndex);\n }\n };\n\n const thumbnailImageClick = id => {\n const newIndex = imageIds.indexOf(id);\n if (newIndex !== -1) setSelectedImageIndex(newIndex);\n };\n\n return {\n ...props,\n imageIds,\n selectedImageId,\n selectedImageIndex,\n thumbnailsListRef,\n priorityLimit,\n thumbnailImageClick,\n mainImageButtonClick\n };\n};\n\nexport default useThumbnailCarousel;\n"],"mappings":"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"}
|
package/lib/variants/index.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
require("core-js/modules/es.object.define-property.js");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports["default"] = void 0;
|
|
8
|
-
var
|
|
9
|
+
var _ThumbnailCarousel = _interopRequireDefault(require("./ThumbnailCarousel"));
|
|
10
|
+
var _default = exports["default"] = {
|
|
11
|
+
thumbnailCarousel: _ThumbnailCarousel["default"]
|
|
12
|
+
};
|
|
9
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/variants/index.js"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"index.js","names":["_ThumbnailCarousel","_interopRequireDefault","require","_default","exports","thumbnailCarousel"],"sources":["../../src/variants/index.js"],"sourcesContent":["import thumbnailCarousel from './ThumbnailCarousel';\n\nexport default {\n thumbnailCarousel\n};\n"],"mappings":";;;;;;;;AAAA,IAAAA,kBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAoD,IAAAC,QAAA,GAAAC,OAAA,cAErC;EACbC,iBAAiB,EAAjBA;AACF,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import useThumbnailCarousel from './useThumbnailCarousel';
|
|
4
|
+
import ThumbnailImage from './ThumbnailImage';
|
|
5
|
+
const ThumbnailCarousel = props => {
|
|
6
|
+
const {
|
|
7
|
+
thumbnailsListRef,
|
|
8
|
+
imageIds,
|
|
9
|
+
selectedImageId,
|
|
10
|
+
priorityLimit,
|
|
11
|
+
mainImageButtonClick,
|
|
12
|
+
thumbnailImageClick
|
|
13
|
+
} = useThumbnailCarousel(props);
|
|
14
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
15
|
+
className: "thumbnail-carousel",
|
|
16
|
+
"data-testid": "thumbnail-carousel"
|
|
17
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
18
|
+
className: "thumbnail-carousel__main_image_container"
|
|
19
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
20
|
+
id: "previous-button",
|
|
21
|
+
className: "thumbnail-carousel__main_image_container__button",
|
|
22
|
+
role: "button",
|
|
23
|
+
onClick: () => mainImageButtonClick()
|
|
24
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
25
|
+
className: "arrow arrow--left"
|
|
26
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
27
|
+
className: "thumbnail-carousel__main_image_container__main-image",
|
|
28
|
+
"data-testid": "thumbnail-main-image",
|
|
29
|
+
ref: thumbnailsListRef
|
|
30
|
+
}, /*#__PURE__*/React.createElement(ThumbnailImage, _extends({}, props, {
|
|
31
|
+
priority: true,
|
|
32
|
+
imageId: selectedImageId
|
|
33
|
+
}))), /*#__PURE__*/React.createElement("div", {
|
|
34
|
+
id: "next-button",
|
|
35
|
+
className: "thumbnail-carousel__main_image_container__button next",
|
|
36
|
+
role: "button",
|
|
37
|
+
onClick: () => mainImageButtonClick(true)
|
|
38
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
39
|
+
className: "arrow arrow--right"
|
|
40
|
+
}))), /*#__PURE__*/React.createElement("div", {
|
|
41
|
+
className: "thumbnail-carousel__list"
|
|
42
|
+
}, imageIds.map((imageId, index) => /*#__PURE__*/React.createElement(ThumbnailImage, _extends({}, props, {
|
|
43
|
+
key: imageId,
|
|
44
|
+
priority: index < priorityLimit,
|
|
45
|
+
imageId: imageId,
|
|
46
|
+
selectedImageId: selectedImageId,
|
|
47
|
+
handleOnClick: thumbnailImageClick
|
|
48
|
+
})))));
|
|
49
|
+
};
|
|
50
|
+
export default ThumbnailCarousel;
|
|
51
|
+
//# sourceMappingURL=ThumbnailCarousel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThumbnailCarousel.js","names":["React","useThumbnailCarousel","ThumbnailImage","ThumbnailCarousel","props","thumbnailsListRef","imageIds","selectedImageId","priorityLimit","mainImageButtonClick","thumbnailImageClick","createElement","className","id","role","onClick","ref","_extends","priority","imageId","map","index","key","handleOnClick"],"sources":["../../../src/variants/ThumbnailCarousel/ThumbnailCarousel.js"],"sourcesContent":["import React from 'react';\nimport useThumbnailCarousel from './useThumbnailCarousel';\nimport ThumbnailImage from './ThumbnailImage';\n\nconst ThumbnailCarousel = props => {\n const {\n thumbnailsListRef,\n imageIds,\n selectedImageId,\n priorityLimit,\n mainImageButtonClick,\n thumbnailImageClick\n } = useThumbnailCarousel(props);\n\n return (\n <div className=\"thumbnail-carousel\" data-testid=\"thumbnail-carousel\">\n <div className=\"thumbnail-carousel__main_image_container\">\n <div\n id=\"previous-button\"\n className=\"thumbnail-carousel__main_image_container__button\"\n role=\"button\"\n onClick={() => mainImageButtonClick()}>\n <div className=\"arrow arrow--left\" />\n </div>\n <div\n className=\"thumbnail-carousel__main_image_container__main-image\"\n data-testid=\"thumbnail-main-image\"\n ref={thumbnailsListRef}>\n <ThumbnailImage {...props} priority imageId={selectedImageId} />\n </div>\n <div\n id=\"next-button\"\n className=\"thumbnail-carousel__main_image_container__button next\"\n role=\"button\"\n onClick={() => mainImageButtonClick(true)}>\n <div className=\"arrow arrow--right\" />\n </div>\n </div>\n <div className=\"thumbnail-carousel__list\">\n {imageIds.map((imageId, index) => (\n <ThumbnailImage\n {...props}\n key={imageId}\n priority={index < priorityLimit}\n imageId={imageId}\n selectedImageId={selectedImageId}\n handleOnClick={thumbnailImageClick}\n />\n ))}\n </div>\n </div>\n );\n};\n\nexport default ThumbnailCarousel;\n"],"mappings":";AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,oBAAoB,MAAM,wBAAwB;AACzD,OAAOC,cAAc,MAAM,kBAAkB;AAE7C,MAAMC,iBAAiB,GAAGC,KAAK,IAAI;EACjC,MAAM;IACJC,iBAAiB;IACjBC,QAAQ;IACRC,eAAe;IACfC,aAAa;IACbC,oBAAoB;IACpBC;EACF,CAAC,GAAGT,oBAAoB,CAACG,KAAK,CAAC;EAE/B,oBACEJ,KAAA,CAAAW,aAAA;IAAKC,SAAS,EAAC,oBAAoB;IAAC,eAAY;EAAoB,gBAClEZ,KAAA,CAAAW,aAAA;IAAKC,SAAS,EAAC;EAA0C,gBACvDZ,KAAA,CAAAW,aAAA;IACEE,EAAE,EAAC,iBAAiB;IACpBD,SAAS,EAAC,kDAAkD;IAC5DE,IAAI,EAAC,QAAQ;IACbC,OAAO,EAAEA,CAAA,KAAMN,oBAAoB,CAAC;EAAE,gBACtCT,KAAA,CAAAW,aAAA;IAAKC,SAAS,EAAC;EAAmB,CAAE,CACjC,CAAC,eACNZ,KAAA,CAAAW,aAAA;IACEC,SAAS,EAAC,sDAAsD;IAChE,eAAY,sBAAsB;IAClCI,GAAG,EAAEX;EAAkB,gBACvBL,KAAA,CAAAW,aAAA,CAACT,cAAc,EAAAe,QAAA,KAAKb,KAAK;IAAEc,QAAQ;IAACC,OAAO,EAAEZ;EAAgB,EAAE,CAC5D,CAAC,eACNP,KAAA,CAAAW,aAAA;IACEE,EAAE,EAAC,aAAa;IAChBD,SAAS,EAAC,uDAAuD;IACjEE,IAAI,EAAC,QAAQ;IACbC,OAAO,EAAEA,CAAA,KAAMN,oBAAoB,CAAC,IAAI;EAAE,gBAC1CT,KAAA,CAAAW,aAAA;IAAKC,SAAS,EAAC;EAAoB,CAAE,CAClC,CACF,CAAC,eACNZ,KAAA,CAAAW,aAAA;IAAKC,SAAS,EAAC;EAA0B,GACtCN,QAAQ,CAACc,GAAG,CAAC,CAACD,OAAO,EAAEE,KAAK,kBAC3BrB,KAAA,CAAAW,aAAA,CAACT,cAAc,EAAAe,QAAA,KACTb,KAAK;IACTkB,GAAG,EAAEH,OAAQ;IACbD,QAAQ,EAAEG,KAAK,GAAGb,aAAc;IAChCW,OAAO,EAAEA,OAAQ;IACjBZ,eAAe,EAAEA,eAAgB;IACjCgB,aAAa,EAAEb;EAAoB,EACpC,CACF,CACE,CACF,CAAC;AAEV,CAAC;AAED,eAAeP,iBAAiB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import LazyImage from '../../../components/LazyImage';
|
|
3
|
+
import useThumbnailImage from './useThumbnailImage';
|
|
4
|
+
const ThumbnailImage = props => {
|
|
5
|
+
const {
|
|
6
|
+
loading,
|
|
7
|
+
error,
|
|
8
|
+
className,
|
|
9
|
+
imageRef,
|
|
10
|
+
imageUrl,
|
|
11
|
+
altText,
|
|
12
|
+
priority,
|
|
13
|
+
handleClick,
|
|
14
|
+
handleEnableLightbox
|
|
15
|
+
} = useThumbnailImage(props);
|
|
16
|
+
if (error) return error.message;
|
|
17
|
+
if (loading) return null;
|
|
18
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
19
|
+
ref: imageRef,
|
|
20
|
+
className: className,
|
|
21
|
+
onClick: handleClick,
|
|
22
|
+
role: "button",
|
|
23
|
+
"data-testid": "thumbnail-image"
|
|
24
|
+
}, /*#__PURE__*/React.createElement(LazyImage, {
|
|
25
|
+
src: imageUrl,
|
|
26
|
+
alt: altText,
|
|
27
|
+
sizeKey: "carousel",
|
|
28
|
+
onClick: handleEnableLightbox,
|
|
29
|
+
role: "button",
|
|
30
|
+
priority: priority
|
|
31
|
+
}));
|
|
32
|
+
};
|
|
33
|
+
export default ThumbnailImage;
|
|
34
|
+
//# sourceMappingURL=ThumbnailImage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThumbnailImage.js","names":["React","LazyImage","useThumbnailImage","ThumbnailImage","props","loading","error","className","imageRef","imageUrl","altText","priority","handleClick","handleEnableLightbox","message","createElement","ref","onClick","role","src","alt","sizeKey"],"sources":["../../../../src/variants/ThumbnailCarousel/ThumbnailImage/ThumbnailImage.js"],"sourcesContent":["import React from 'react';\nimport LazyImage from '../../../components/LazyImage';\nimport useThumbnailImage from './useThumbnailImage';\n\nconst ThumbnailImage = props => {\n const {\n loading,\n error,\n className,\n imageRef,\n imageUrl,\n altText,\n priority,\n handleClick,\n handleEnableLightbox\n } = useThumbnailImage(props);\n\n if (error) return error.message;\n if (loading) return null;\n\n return (\n <div\n ref={imageRef}\n className={className}\n onClick={handleClick}\n role=\"button\"\n data-testid=\"thumbnail-image\">\n <LazyImage\n src={imageUrl}\n alt={altText}\n sizeKey=\"carousel\"\n onClick={handleEnableLightbox}\n role=\"button\"\n priority={priority}\n />\n </div>\n );\n};\n\nexport default ThumbnailImage;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,SAAS,MAAM,+BAA+B;AACrD,OAAOC,iBAAiB,MAAM,qBAAqB;AAEnD,MAAMC,cAAc,GAAGC,KAAK,IAAI;EAC9B,MAAM;IACJC,OAAO;IACPC,KAAK;IACLC,SAAS;IACTC,QAAQ;IACRC,QAAQ;IACRC,OAAO;IACPC,QAAQ;IACRC,WAAW;IACXC;EACF,CAAC,GAAGX,iBAAiB,CAACE,KAAK,CAAC;EAE5B,IAAIE,KAAK,EAAE,OAAOA,KAAK,CAACQ,OAAO;EAC/B,IAAIT,OAAO,EAAE,OAAO,IAAI;EAExB,oBACEL,KAAA,CAAAe,aAAA;IACEC,GAAG,EAAER,QAAS;IACdD,SAAS,EAAEA,SAAU;IACrBU,OAAO,EAAEL,WAAY;IACrBM,IAAI,EAAC,QAAQ;IACb,eAAY;EAAiB,gBAC7BlB,KAAA,CAAAe,aAAA,CAACd,SAAS;IACRkB,GAAG,EAAEV,QAAS;IACdW,GAAG,EAAEV,OAAQ;IACbW,OAAO,EAAC,UAAU;IAClBJ,OAAO,EAAEJ,oBAAqB;IAC9BK,IAAI,EAAC,QAAQ;IACbP,QAAQ,EAAEA;EAAS,CACpB,CACE,CAAC;AAEV,CAAC;AAED,eAAeR,cAAc"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["ThumbnailImage"],"sources":["../../../../src/variants/ThumbnailCarousel/ThumbnailImage/index.js"],"sourcesContent":["import ThumbnailImage from './ThumbnailImage';\n\nexport default ThumbnailImage;\n"],"mappings":"AAAA,OAAOA,cAAc,MAAM,kBAAkB;AAE7C,eAAeA,cAAc"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { useEffect, useRef } from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { useGetImages } from '../../../hooks';
|
|
4
|
+
import { getImageData } from '../../../utils';
|
|
5
|
+
const useThumbnailImage = ({
|
|
6
|
+
imageId,
|
|
7
|
+
enableLightbox,
|
|
8
|
+
toggleModal,
|
|
9
|
+
handleSelectedImage,
|
|
10
|
+
priority,
|
|
11
|
+
selectedImageId,
|
|
12
|
+
handleOnClick
|
|
13
|
+
}) => {
|
|
14
|
+
const imageRef = useRef(null);
|
|
15
|
+
const isSelected = selectedImageId === imageId;
|
|
16
|
+
const {
|
|
17
|
+
data = {},
|
|
18
|
+
loading,
|
|
19
|
+
error
|
|
20
|
+
} = useGetImages(imageId);
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (imageRef.current && isSelected) {
|
|
23
|
+
imageRef.current.scrollIntoView({
|
|
24
|
+
behavior: 'smooth',
|
|
25
|
+
block: 'start'
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}, [isSelected]);
|
|
29
|
+
const handleEnableLightbox = () => {
|
|
30
|
+
if (!enableLightbox) return;
|
|
31
|
+
toggleModal();
|
|
32
|
+
handleSelectedImage(imageId);
|
|
33
|
+
};
|
|
34
|
+
const handleClick = () => {
|
|
35
|
+
handleOnClick(imageId);
|
|
36
|
+
};
|
|
37
|
+
const {
|
|
38
|
+
url: imageUrl = '',
|
|
39
|
+
data: imageData = {}
|
|
40
|
+
} = data.getFile || {
|
|
41
|
+
getFile: {
|
|
42
|
+
url: '',
|
|
43
|
+
data: {}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const {
|
|
47
|
+
altText
|
|
48
|
+
} = getImageData({}, imageData);
|
|
49
|
+
const className = selectedImageId === imageId ? 'thumbnail-carousel-image thumbnail-carousel-image--selected' : 'thumbnail-carousel-image';
|
|
50
|
+
return {
|
|
51
|
+
loading,
|
|
52
|
+
error,
|
|
53
|
+
className,
|
|
54
|
+
imageRef,
|
|
55
|
+
imageUrl,
|
|
56
|
+
altText,
|
|
57
|
+
priority,
|
|
58
|
+
handleClick,
|
|
59
|
+
handleEnableLightbox
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
useThumbnailImage.propTypes = {
|
|
63
|
+
imageId: PropTypes.string.isRequired,
|
|
64
|
+
selectedImageId: PropTypes.string.isRequired,
|
|
65
|
+
enableLightbox: PropTypes.bool.isRequired,
|
|
66
|
+
toggleModal: PropTypes.func.isRequired,
|
|
67
|
+
handleSelectedImage: PropTypes.func.isRequired,
|
|
68
|
+
priority: PropTypes.bool.isRequired,
|
|
69
|
+
handleOnClick: PropTypes.func
|
|
70
|
+
};
|
|
71
|
+
useThumbnailImage.defaultProps = {
|
|
72
|
+
handleOnClick: () => {}
|
|
73
|
+
};
|
|
74
|
+
export default useThumbnailImage;
|
|
75
|
+
//# sourceMappingURL=useThumbnailImage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useThumbnailImage.js","names":["useEffect","useRef","PropTypes","useGetImages","getImageData","useThumbnailImage","imageId","enableLightbox","toggleModal","handleSelectedImage","priority","selectedImageId","handleOnClick","imageRef","isSelected","data","loading","error","current","scrollIntoView","behavior","block","handleEnableLightbox","handleClick","url","imageUrl","imageData","getFile","altText","className","propTypes","string","isRequired","bool","func","defaultProps"],"sources":["../../../../src/variants/ThumbnailCarousel/ThumbnailImage/useThumbnailImage.js"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { useGetImages } from '../../../hooks';\nimport { getImageData } from '../../../utils';\n\nconst useThumbnailImage = ({\n imageId,\n enableLightbox,\n toggleModal,\n handleSelectedImage,\n priority,\n selectedImageId,\n handleOnClick\n}) => {\n const imageRef = useRef(null);\n const isSelected = selectedImageId === imageId;\n const { data = {}, loading, error } = useGetImages(imageId);\n\n useEffect(\n () => {\n if (imageRef.current && isSelected) {\n imageRef.current.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n },\n [isSelected]\n );\n\n const handleEnableLightbox = () => {\n if (!enableLightbox) return;\n toggleModal();\n handleSelectedImage(imageId);\n };\n\n const handleClick = () => {\n handleOnClick(imageId);\n };\n\n const { url: imageUrl = '', data: imageData = {} } = data.getFile || {\n getFile: { url: '', data: {} }\n };\n const { altText } = getImageData({}, imageData);\n\n const className =\n selectedImageId === imageId\n ? 'thumbnail-carousel-image thumbnail-carousel-image--selected'\n : 'thumbnail-carousel-image';\n\n return {\n loading,\n error,\n className,\n imageRef,\n imageUrl,\n altText,\n priority,\n handleClick,\n handleEnableLightbox\n };\n};\n\nuseThumbnailImage.propTypes = {\n imageId: PropTypes.string.isRequired,\n selectedImageId: PropTypes.string.isRequired,\n enableLightbox: PropTypes.bool.isRequired,\n toggleModal: PropTypes.func.isRequired,\n handleSelectedImage: PropTypes.func.isRequired,\n priority: PropTypes.bool.isRequired,\n handleOnClick: PropTypes.func\n};\n\nuseThumbnailImage.defaultProps = {\n handleOnClick: () => {}\n};\n\nexport default useThumbnailImage;\n"],"mappings":"AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACzC,OAAOC,SAAS,MAAM,YAAY;AAClC,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SAASC,YAAY,QAAQ,gBAAgB;AAE7C,MAAMC,iBAAiB,GAAGA,CAAC;EACzBC,OAAO;EACPC,cAAc;EACdC,WAAW;EACXC,mBAAmB;EACnBC,QAAQ;EACRC,eAAe;EACfC;AACF,CAAC,KAAK;EACJ,MAAMC,QAAQ,GAAGZ,MAAM,CAAC,IAAI,CAAC;EAC7B,MAAMa,UAAU,GAAGH,eAAe,KAAKL,OAAO;EAC9C,MAAM;IAAES,IAAI,GAAG,CAAC,CAAC;IAAEC,OAAO;IAAEC;EAAM,CAAC,GAAGd,YAAY,CAACG,OAAO,CAAC;EAE3DN,SAAS,CACP,MAAM;IACJ,IAAIa,QAAQ,CAACK,OAAO,IAAIJ,UAAU,EAAE;MAClCD,QAAQ,CAACK,OAAO,CAACC,cAAc,CAAC;QAAEC,QAAQ,EAAE,QAAQ;QAAEC,KAAK,EAAE;MAAQ,CAAC,CAAC;IACzE;EACF,CAAC,EACD,CAACP,UAAU,CACb,CAAC;EAED,MAAMQ,oBAAoB,GAAGA,CAAA,KAAM;IACjC,IAAI,CAACf,cAAc,EAAE;IACrBC,WAAW,CAAC,CAAC;IACbC,mBAAmB,CAACH,OAAO,CAAC;EAC9B,CAAC;EAED,MAAMiB,WAAW,GAAGA,CAAA,KAAM;IACxBX,aAAa,CAACN,OAAO,CAAC;EACxB,CAAC;EAED,MAAM;IAAEkB,GAAG,EAAEC,QAAQ,GAAG,EAAE;IAAEV,IAAI,EAAEW,SAAS,GAAG,CAAC;EAAE,CAAC,GAAGX,IAAI,CAACY,OAAO,IAAI;IACnEA,OAAO,EAAE;MAAEH,GAAG,EAAE,EAAE;MAAET,IAAI,EAAE,CAAC;IAAE;EAC/B,CAAC;EACD,MAAM;IAAEa;EAAQ,CAAC,GAAGxB,YAAY,CAAC,CAAC,CAAC,EAAEsB,SAAS,CAAC;EAE/C,MAAMG,SAAS,GACblB,eAAe,KAAKL,OAAO,GACvB,6DAA6D,GAC7D,0BAA0B;EAEhC,OAAO;IACLU,OAAO;IACPC,KAAK;IACLY,SAAS;IACThB,QAAQ;IACRY,QAAQ;IACRG,OAAO;IACPlB,QAAQ;IACRa,WAAW;IACXD;EACF,CAAC;AACH,CAAC;AAEDjB,iBAAiB,CAACyB,SAAS,GAAG;EAC5BxB,OAAO,EAAEJ,SAAS,CAAC6B,MAAM,CAACC,UAAU;EACpCrB,eAAe,EAAET,SAAS,CAAC6B,MAAM,CAACC,UAAU;EAC5CzB,cAAc,EAAEL,SAAS,CAAC+B,IAAI,CAACD,UAAU;EACzCxB,WAAW,EAAEN,SAAS,CAACgC,IAAI,CAACF,UAAU;EACtCvB,mBAAmB,EAAEP,SAAS,CAACgC,IAAI,CAACF,UAAU;EAC9CtB,QAAQ,EAAER,SAAS,CAAC+B,IAAI,CAACD,UAAU;EACnCpB,aAAa,EAAEV,SAAS,CAACgC;AAC3B,CAAC;AAED7B,iBAAiB,CAAC8B,YAAY,GAAG;EAC/BvB,aAAa,EAAEA,CAAA,KAAM,CAAC;AACxB,CAAC;AAED,eAAeP,iBAAiB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
|
+
import ThumbnailCarouselComponent from './ThumbnailCarousel';
|
|
5
|
+
const ThumbnailCarousel = {
|
|
6
|
+
getSettings: componentSettings => _objectSpread({}, componentSettings),
|
|
7
|
+
VariantComponent: ThumbnailCarouselComponent
|
|
8
|
+
};
|
|
9
|
+
export default ThumbnailCarousel;
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["ThumbnailCarouselComponent","ThumbnailCarousel","getSettings","componentSettings","_objectSpread","VariantComponent"],"sources":["../../../src/variants/ThumbnailCarousel/index.js"],"sourcesContent":["import ThumbnailCarouselComponent from './ThumbnailCarousel';\n\nconst ThumbnailCarousel = {\n getSettings: componentSettings => ({\n ...componentSettings\n }),\n VariantComponent: ThumbnailCarouselComponent\n};\n\nexport default ThumbnailCarousel;\n"],"mappings":";;;AAAA,OAAOA,0BAA0B,MAAM,qBAAqB;AAE5D,MAAMC,iBAAiB,GAAG;EACxBC,WAAW,EAAEC,iBAAiB,IAAAC,aAAA,KACzBD,iBAAiB,CACpB;EACFE,gBAAgB,EAAEL;AACpB,CAAC;AAED,eAAeC,iBAAiB"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
3
|
+
const _excluded = ["imageIds", "priorityLimit"];
|
|
4
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
5
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
6
|
+
import { useState, useRef } from 'react';
|
|
7
|
+
const useThumbnailCarousel = _ref => {
|
|
8
|
+
let {
|
|
9
|
+
imageIds,
|
|
10
|
+
priorityLimit
|
|
11
|
+
} = _ref,
|
|
12
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
13
|
+
const [selectedImageIndex, setSelectedImageIndex] = useState(0);
|
|
14
|
+
const thumbnailsListRef = useRef(null);
|
|
15
|
+
const selectedImageId = imageIds[selectedImageIndex];
|
|
16
|
+
const mainImageButtonClick = next => {
|
|
17
|
+
if (next) {
|
|
18
|
+
const isLast = imageIds.length - 1 === selectedImageIndex;
|
|
19
|
+
const newIndex = isLast ? 0 : selectedImageIndex + 1;
|
|
20
|
+
setSelectedImageIndex(newIndex);
|
|
21
|
+
} else {
|
|
22
|
+
const isFirst = selectedImageIndex === 0;
|
|
23
|
+
const newIndex = isFirst ? imageIds.length - 1 : selectedImageIndex - 1;
|
|
24
|
+
setSelectedImageIndex(newIndex);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const thumbnailImageClick = id => {
|
|
28
|
+
const newIndex = imageIds.indexOf(id);
|
|
29
|
+
if (newIndex !== -1) setSelectedImageIndex(newIndex);
|
|
30
|
+
};
|
|
31
|
+
return _objectSpread(_objectSpread({}, props), {}, {
|
|
32
|
+
imageIds,
|
|
33
|
+
selectedImageId,
|
|
34
|
+
selectedImageIndex,
|
|
35
|
+
thumbnailsListRef,
|
|
36
|
+
priorityLimit,
|
|
37
|
+
thumbnailImageClick,
|
|
38
|
+
mainImageButtonClick
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
export default useThumbnailCarousel;
|
|
42
|
+
//# sourceMappingURL=useThumbnailCarousel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useThumbnailCarousel.js","names":["useState","useRef","useThumbnailCarousel","_ref","imageIds","priorityLimit","props","_objectWithoutProperties","_excluded","selectedImageIndex","setSelectedImageIndex","thumbnailsListRef","selectedImageId","mainImageButtonClick","next","isLast","length","newIndex","isFirst","thumbnailImageClick","id","indexOf","_objectSpread"],"sources":["../../../src/variants/ThumbnailCarousel/useThumbnailCarousel.js"],"sourcesContent":["import { useState, useRef } from 'react';\n\nconst useThumbnailCarousel = ({ imageIds, priorityLimit, ...props }) => {\n const [selectedImageIndex, setSelectedImageIndex] = useState(0);\n const thumbnailsListRef = useRef(null);\n const selectedImageId = imageIds[selectedImageIndex];\n\n const mainImageButtonClick = next => {\n if (next) {\n const isLast = imageIds.length - 1 === selectedImageIndex;\n const newIndex = isLast ? 0 : selectedImageIndex + 1;\n setSelectedImageIndex(newIndex);\n } else {\n const isFirst = selectedImageIndex === 0;\n const newIndex = isFirst ? imageIds.length - 1 : selectedImageIndex - 1;\n setSelectedImageIndex(newIndex);\n }\n };\n\n const thumbnailImageClick = id => {\n const newIndex = imageIds.indexOf(id);\n if (newIndex !== -1) setSelectedImageIndex(newIndex);\n };\n\n return {\n ...props,\n imageIds,\n selectedImageId,\n selectedImageIndex,\n thumbnailsListRef,\n priorityLimit,\n thumbnailImageClick,\n mainImageButtonClick\n };\n};\n\nexport default useThumbnailCarousel;\n"],"mappings":";;;;;AAAA,SAASA,QAAQ,EAAEC,MAAM,QAAQ,OAAO;AAExC,MAAMC,oBAAoB,GAAGC,IAAA,IAA2C;EAAA,IAA1C;MAAEC,QAAQ;MAAEC;IAAwB,CAAC,GAAAF,IAAA;IAAPG,KAAK,GAAAC,wBAAA,CAAAJ,IAAA,EAAAK,SAAA;EAC/D,MAAM,CAACC,kBAAkB,EAAEC,qBAAqB,CAAC,GAAGV,QAAQ,CAAC,CAAC,CAAC;EAC/D,MAAMW,iBAAiB,GAAGV,MAAM,CAAC,IAAI,CAAC;EACtC,MAAMW,eAAe,GAAGR,QAAQ,CAACK,kBAAkB,CAAC;EAEpD,MAAMI,oBAAoB,GAAGC,IAAI,IAAI;IACnC,IAAIA,IAAI,EAAE;MACR,MAAMC,MAAM,GAAGX,QAAQ,CAACY,MAAM,GAAG,CAAC,KAAKP,kBAAkB;MACzD,MAAMQ,QAAQ,GAAGF,MAAM,GAAG,CAAC,GAAGN,kBAAkB,GAAG,CAAC;MACpDC,qBAAqB,CAACO,QAAQ,CAAC;IACjC,CAAC,MAAM;MACL,MAAMC,OAAO,GAAGT,kBAAkB,KAAK,CAAC;MACxC,MAAMQ,QAAQ,GAAGC,OAAO,GAAGd,QAAQ,CAACY,MAAM,GAAG,CAAC,GAAGP,kBAAkB,GAAG,CAAC;MACvEC,qBAAqB,CAACO,QAAQ,CAAC;IACjC;EACF,CAAC;EAED,MAAME,mBAAmB,GAAGC,EAAE,IAAI;IAChC,MAAMH,QAAQ,GAAGb,QAAQ,CAACiB,OAAO,CAACD,EAAE,CAAC;IACrC,IAAIH,QAAQ,KAAK,CAAC,CAAC,EAAEP,qBAAqB,CAACO,QAAQ,CAAC;EACtD,CAAC;EAED,OAAAK,aAAA,CAAAA,aAAA,KACKhB,KAAK;IACRF,QAAQ;IACRQ,eAAe;IACfH,kBAAkB;IAClBE,iBAAiB;IACjBN,aAAa;IACbc,mBAAmB;IACnBN;EAAoB;AAExB,CAAC;AAED,eAAeX,oBAAoB"}
|
package/lib-es/variants/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/variants/index.js"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"index.js","names":["thumbnailCarousel"],"sources":["../../src/variants/index.js"],"sourcesContent":["import thumbnailCarousel from './ThumbnailCarousel';\n\nexport default {\n thumbnailCarousel\n};\n"],"mappings":"AAAA,OAAOA,iBAAiB,MAAM,qBAAqB;AAEnD,eAAe;EACbA;AACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blaze-cms/react-page-builder",
|
|
3
|
-
"version": "0.141.0-core-styles.
|
|
3
|
+
"version": "0.141.0-core-styles.20",
|
|
4
4
|
"description": "Blaze react page builder",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib-es/index.js",
|
|
@@ -89,5 +89,5 @@
|
|
|
89
89
|
"lib/*",
|
|
90
90
|
"lib-es/*"
|
|
91
91
|
],
|
|
92
|
-
"gitHead": "
|
|
92
|
+
"gitHead": "4e9b6cfffbc04fa32476c3daed008594a54838e9"
|
|
93
93
|
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import useThumbnailCarousel from './useThumbnailCarousel';
|
|
3
|
+
import ThumbnailImage from './ThumbnailImage';
|
|
4
|
+
|
|
5
|
+
const ThumbnailCarousel = props => {
|
|
6
|
+
const {
|
|
7
|
+
thumbnailsListRef,
|
|
8
|
+
imageIds,
|
|
9
|
+
selectedImageId,
|
|
10
|
+
priorityLimit,
|
|
11
|
+
mainImageButtonClick,
|
|
12
|
+
thumbnailImageClick
|
|
13
|
+
} = useThumbnailCarousel(props);
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<div className="thumbnail-carousel" data-testid="thumbnail-carousel">
|
|
17
|
+
<div className="thumbnail-carousel__main_image_container">
|
|
18
|
+
<div
|
|
19
|
+
id="previous-button"
|
|
20
|
+
className="thumbnail-carousel__main_image_container__button"
|
|
21
|
+
role="button"
|
|
22
|
+
onClick={() => mainImageButtonClick()}>
|
|
23
|
+
<div className="arrow arrow--left" />
|
|
24
|
+
</div>
|
|
25
|
+
<div
|
|
26
|
+
className="thumbnail-carousel__main_image_container__main-image"
|
|
27
|
+
data-testid="thumbnail-main-image"
|
|
28
|
+
ref={thumbnailsListRef}>
|
|
29
|
+
<ThumbnailImage {...props} priority imageId={selectedImageId} />
|
|
30
|
+
</div>
|
|
31
|
+
<div
|
|
32
|
+
id="next-button"
|
|
33
|
+
className="thumbnail-carousel__main_image_container__button next"
|
|
34
|
+
role="button"
|
|
35
|
+
onClick={() => mainImageButtonClick(true)}>
|
|
36
|
+
<div className="arrow arrow--right" />
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
<div className="thumbnail-carousel__list">
|
|
40
|
+
{imageIds.map((imageId, index) => (
|
|
41
|
+
<ThumbnailImage
|
|
42
|
+
{...props}
|
|
43
|
+
key={imageId}
|
|
44
|
+
priority={index < priorityLimit}
|
|
45
|
+
imageId={imageId}
|
|
46
|
+
selectedImageId={selectedImageId}
|
|
47
|
+
handleOnClick={thumbnailImageClick}
|
|
48
|
+
/>
|
|
49
|
+
))}
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export default ThumbnailCarousel;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import LazyImage from '../../../components/LazyImage';
|
|
3
|
+
import useThumbnailImage from './useThumbnailImage';
|
|
4
|
+
|
|
5
|
+
const ThumbnailImage = props => {
|
|
6
|
+
const {
|
|
7
|
+
loading,
|
|
8
|
+
error,
|
|
9
|
+
className,
|
|
10
|
+
imageRef,
|
|
11
|
+
imageUrl,
|
|
12
|
+
altText,
|
|
13
|
+
priority,
|
|
14
|
+
handleClick,
|
|
15
|
+
handleEnableLightbox
|
|
16
|
+
} = useThumbnailImage(props);
|
|
17
|
+
|
|
18
|
+
if (error) return error.message;
|
|
19
|
+
if (loading) return null;
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
<div
|
|
23
|
+
ref={imageRef}
|
|
24
|
+
className={className}
|
|
25
|
+
onClick={handleClick}
|
|
26
|
+
role="button"
|
|
27
|
+
data-testid="thumbnail-image">
|
|
28
|
+
<LazyImage
|
|
29
|
+
src={imageUrl}
|
|
30
|
+
alt={altText}
|
|
31
|
+
sizeKey="carousel"
|
|
32
|
+
onClick={handleEnableLightbox}
|
|
33
|
+
role="button"
|
|
34
|
+
priority={priority}
|
|
35
|
+
/>
|
|
36
|
+
</div>
|
|
37
|
+
);
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export default ThumbnailImage;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { useEffect, useRef } from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { useGetImages } from '../../../hooks';
|
|
4
|
+
import { getImageData } from '../../../utils';
|
|
5
|
+
|
|
6
|
+
const useThumbnailImage = ({
|
|
7
|
+
imageId,
|
|
8
|
+
enableLightbox,
|
|
9
|
+
toggleModal,
|
|
10
|
+
handleSelectedImage,
|
|
11
|
+
priority,
|
|
12
|
+
selectedImageId,
|
|
13
|
+
handleOnClick
|
|
14
|
+
}) => {
|
|
15
|
+
const imageRef = useRef(null);
|
|
16
|
+
const isSelected = selectedImageId === imageId;
|
|
17
|
+
const { data = {}, loading, error } = useGetImages(imageId);
|
|
18
|
+
|
|
19
|
+
useEffect(
|
|
20
|
+
() => {
|
|
21
|
+
if (imageRef.current && isSelected) {
|
|
22
|
+
imageRef.current.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
[isSelected]
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
const handleEnableLightbox = () => {
|
|
29
|
+
if (!enableLightbox) return;
|
|
30
|
+
toggleModal();
|
|
31
|
+
handleSelectedImage(imageId);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const handleClick = () => {
|
|
35
|
+
handleOnClick(imageId);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const { url: imageUrl = '', data: imageData = {} } = data.getFile || {
|
|
39
|
+
getFile: { url: '', data: {} }
|
|
40
|
+
};
|
|
41
|
+
const { altText } = getImageData({}, imageData);
|
|
42
|
+
|
|
43
|
+
const className =
|
|
44
|
+
selectedImageId === imageId
|
|
45
|
+
? 'thumbnail-carousel-image thumbnail-carousel-image--selected'
|
|
46
|
+
: 'thumbnail-carousel-image';
|
|
47
|
+
|
|
48
|
+
return {
|
|
49
|
+
loading,
|
|
50
|
+
error,
|
|
51
|
+
className,
|
|
52
|
+
imageRef,
|
|
53
|
+
imageUrl,
|
|
54
|
+
altText,
|
|
55
|
+
priority,
|
|
56
|
+
handleClick,
|
|
57
|
+
handleEnableLightbox
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
useThumbnailImage.propTypes = {
|
|
62
|
+
imageId: PropTypes.string.isRequired,
|
|
63
|
+
selectedImageId: PropTypes.string.isRequired,
|
|
64
|
+
enableLightbox: PropTypes.bool.isRequired,
|
|
65
|
+
toggleModal: PropTypes.func.isRequired,
|
|
66
|
+
handleSelectedImage: PropTypes.func.isRequired,
|
|
67
|
+
priority: PropTypes.bool.isRequired,
|
|
68
|
+
handleOnClick: PropTypes.func
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
useThumbnailImage.defaultProps = {
|
|
72
|
+
handleOnClick: () => {}
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export default useThumbnailImage;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { useState, useRef } from 'react';
|
|
2
|
+
|
|
3
|
+
const useThumbnailCarousel = ({ imageIds, priorityLimit, ...props }) => {
|
|
4
|
+
const [selectedImageIndex, setSelectedImageIndex] = useState(0);
|
|
5
|
+
const thumbnailsListRef = useRef(null);
|
|
6
|
+
const selectedImageId = imageIds[selectedImageIndex];
|
|
7
|
+
|
|
8
|
+
const mainImageButtonClick = next => {
|
|
9
|
+
if (next) {
|
|
10
|
+
const isLast = imageIds.length - 1 === selectedImageIndex;
|
|
11
|
+
const newIndex = isLast ? 0 : selectedImageIndex + 1;
|
|
12
|
+
setSelectedImageIndex(newIndex);
|
|
13
|
+
} else {
|
|
14
|
+
const isFirst = selectedImageIndex === 0;
|
|
15
|
+
const newIndex = isFirst ? imageIds.length - 1 : selectedImageIndex - 1;
|
|
16
|
+
setSelectedImageIndex(newIndex);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const thumbnailImageClick = id => {
|
|
21
|
+
const newIndex = imageIds.indexOf(id);
|
|
22
|
+
if (newIndex !== -1) setSelectedImageIndex(newIndex);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
return {
|
|
26
|
+
...props,
|
|
27
|
+
imageIds,
|
|
28
|
+
selectedImageId,
|
|
29
|
+
selectedImageIndex,
|
|
30
|
+
thumbnailsListRef,
|
|
31
|
+
priorityLimit,
|
|
32
|
+
thumbnailImageClick,
|
|
33
|
+
mainImageButtonClick
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export default useThumbnailCarousel;
|
package/src/variants/index.js
CHANGED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @jest-environment jsdom
|
|
3
|
+
*/
|
|
4
|
+
import React from 'react';
|
|
5
|
+
import '@testing-library/jest-dom/extend-expect';
|
|
6
|
+
import { render, screen, waitFor } from '@testing-library/react';
|
|
7
|
+
import { MockedProvider } from '@apollo/client/testing';
|
|
8
|
+
import ThumbnailCarousel from '../../../../../src/variants/ThumbnailCarousel/ThumbnailCarousel';
|
|
9
|
+
import IMAGE_MOCKS from './mocks';
|
|
10
|
+
|
|
11
|
+
const mockedProps = {
|
|
12
|
+
imageIds: ['1', '2', '3'],
|
|
13
|
+
priorityLimit: 0
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
describe('ThumbnailCarousel component', () => {
|
|
17
|
+
it('renders ThumbnailCarousel without error', async () => {
|
|
18
|
+
const { asFragment } = render(
|
|
19
|
+
<MockedProvider mocks={IMAGE_MOCKS}>
|
|
20
|
+
<ThumbnailCarousel {...mockedProps} />
|
|
21
|
+
</MockedProvider>
|
|
22
|
+
);
|
|
23
|
+
await waitFor(() => {
|
|
24
|
+
expect(screen.getAllByTestId('thumbnail-image')[0]).toBeInTheDocument();
|
|
25
|
+
});
|
|
26
|
+
expect(asFragment()).toMatchSnapshot();
|
|
27
|
+
expect(screen.getByTestId('thumbnail-carousel')).toBeInTheDocument();
|
|
28
|
+
});
|
|
29
|
+
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @jest-environment jsdom
|
|
3
|
+
*/
|
|
4
|
+
import React from 'react';
|
|
5
|
+
import '@testing-library/jest-dom/extend-expect';
|
|
6
|
+
import { render, screen, waitFor } from '@testing-library/react';
|
|
7
|
+
import { MockedProvider } from '@apollo/client/testing';
|
|
8
|
+
import ThumbnailImage from '../../../../../src/variants/ThumbnailCarousel/ThumbnailImage';
|
|
9
|
+
import IMAGE_MOCKS from './mocks';
|
|
10
|
+
|
|
11
|
+
describe('ThumbnailImage component', () => {
|
|
12
|
+
const mockedProps = {
|
|
13
|
+
imageId: '1',
|
|
14
|
+
enableLightbox: false,
|
|
15
|
+
toggleModal: () => {},
|
|
16
|
+
handleSelectedImage: () => {},
|
|
17
|
+
priority: 0,
|
|
18
|
+
selectedImageId: '1',
|
|
19
|
+
handleOnClick: () => {}
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
it('renders ThumbnailImage without error', async () => {
|
|
23
|
+
const { asFragment } = render(
|
|
24
|
+
<MockedProvider mocks={IMAGE_MOCKS}>
|
|
25
|
+
<ThumbnailImage {...mockedProps} />
|
|
26
|
+
</MockedProvider>
|
|
27
|
+
);
|
|
28
|
+
await waitFor(() => {
|
|
29
|
+
expect(screen.getByTestId('thumbnail-image')).toBeInTheDocument();
|
|
30
|
+
});
|
|
31
|
+
expect(asFragment()).toMatchSnapshot();
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('should render error message if query fails', async () => {
|
|
35
|
+
const { asFragment } = render(
|
|
36
|
+
<MockedProvider mocks={IMAGE_MOCKS}>
|
|
37
|
+
<ThumbnailImage {...mockedProps} imageId="6" />
|
|
38
|
+
</MockedProvider>
|
|
39
|
+
);
|
|
40
|
+
await waitFor(() => {
|
|
41
|
+
expect(screen.getByText('Oops something went wrong')).toBeInTheDocument();
|
|
42
|
+
});
|
|
43
|
+
expect(asFragment()).toMatchSnapshot();
|
|
44
|
+
});
|
|
45
|
+
});
|
package/tests/unit/src/variants/ThumbnailCarousel/__snapshots__/ThumbnailCarousel.test.js.snap
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`ThumbnailCarousel component renders ThumbnailCarousel without error 1`] = `
|
|
4
|
+
<DocumentFragment>
|
|
5
|
+
<div
|
|
6
|
+
class="thumbnail-carousel"
|
|
7
|
+
data-testid="thumbnail-carousel"
|
|
8
|
+
>
|
|
9
|
+
<div
|
|
10
|
+
class="thumbnail-carousel__main_image_container"
|
|
11
|
+
>
|
|
12
|
+
<div
|
|
13
|
+
class="thumbnail-carousel__main_image_container__button"
|
|
14
|
+
id="previous-button"
|
|
15
|
+
role="button"
|
|
16
|
+
>
|
|
17
|
+
<div
|
|
18
|
+
class="arrow arrow--left"
|
|
19
|
+
/>
|
|
20
|
+
</div>
|
|
21
|
+
<div
|
|
22
|
+
class="thumbnail-carousel__main_image_container__main-image"
|
|
23
|
+
data-testid="thumbnail-main-image"
|
|
24
|
+
>
|
|
25
|
+
<div
|
|
26
|
+
class="thumbnail-carousel-image"
|
|
27
|
+
data-testid="thumbnail-image"
|
|
28
|
+
role="button"
|
|
29
|
+
>
|
|
30
|
+
<span>
|
|
31
|
+
<img
|
|
32
|
+
alt=""
|
|
33
|
+
role="button"
|
|
34
|
+
src="image1.jpg"
|
|
35
|
+
/>
|
|
36
|
+
</span>
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
<div
|
|
40
|
+
class="thumbnail-carousel__main_image_container__button next"
|
|
41
|
+
id="next-button"
|
|
42
|
+
role="button"
|
|
43
|
+
>
|
|
44
|
+
<div
|
|
45
|
+
class="arrow arrow--right"
|
|
46
|
+
/>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
<div
|
|
50
|
+
class="thumbnail-carousel__list"
|
|
51
|
+
>
|
|
52
|
+
<div
|
|
53
|
+
class="thumbnail-carousel-image thumbnail-carousel-image--selected"
|
|
54
|
+
data-testid="thumbnail-image"
|
|
55
|
+
role="button"
|
|
56
|
+
>
|
|
57
|
+
<span />
|
|
58
|
+
</div>
|
|
59
|
+
<div
|
|
60
|
+
class="thumbnail-carousel-image"
|
|
61
|
+
data-testid="thumbnail-image"
|
|
62
|
+
role="button"
|
|
63
|
+
>
|
|
64
|
+
<span />
|
|
65
|
+
</div>
|
|
66
|
+
<div
|
|
67
|
+
class="thumbnail-carousel-image"
|
|
68
|
+
data-testid="thumbnail-image"
|
|
69
|
+
role="button"
|
|
70
|
+
>
|
|
71
|
+
<span />
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
</DocumentFragment>
|
|
76
|
+
`;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`ThumbnailImage component renders ThumbnailImage without error 1`] = `
|
|
4
|
+
<DocumentFragment>
|
|
5
|
+
<div
|
|
6
|
+
class="thumbnail-carousel-image thumbnail-carousel-image--selected"
|
|
7
|
+
data-testid="thumbnail-image"
|
|
8
|
+
role="button"
|
|
9
|
+
>
|
|
10
|
+
<span />
|
|
11
|
+
</div>
|
|
12
|
+
</DocumentFragment>
|
|
13
|
+
`;
|
|
14
|
+
|
|
15
|
+
exports[`ThumbnailImage component should render error message if query fails 1`] = `
|
|
16
|
+
<DocumentFragment>
|
|
17
|
+
Oops something went wrong
|
|
18
|
+
</DocumentFragment>
|
|
19
|
+
`;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { getFileById } from '../../../../../src/application/query';
|
|
2
|
+
|
|
3
|
+
const IMAGE_MOCKS = [
|
|
4
|
+
{
|
|
5
|
+
request: {
|
|
6
|
+
query: getFileById,
|
|
7
|
+
variables: { id: '1' }
|
|
8
|
+
},
|
|
9
|
+
result: {
|
|
10
|
+
data: {
|
|
11
|
+
getFile: { id: '1', url: 'image1.jpg', caption: 'Caption 1', data: {} }
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
request: {
|
|
17
|
+
query: getFileById,
|
|
18
|
+
variables: { id: '2' }
|
|
19
|
+
},
|
|
20
|
+
result: {
|
|
21
|
+
data: {
|
|
22
|
+
getFile: { id: '2', url: 'image2.jpg', caption: 'Caption 2', data: {} }
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
request: {
|
|
28
|
+
query: getFileById,
|
|
29
|
+
variables: { id: '3' }
|
|
30
|
+
},
|
|
31
|
+
result: {
|
|
32
|
+
data: {
|
|
33
|
+
getFile: { id: '3', url: 'image3.jpg', caption: 'Caption 3', data: {} }
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
request: {
|
|
39
|
+
query: getFileById,
|
|
40
|
+
variables: { id: '6' }
|
|
41
|
+
},
|
|
42
|
+
error: {
|
|
43
|
+
message: 'Oops something went wrong'
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// {
|
|
47
|
+
// request: {
|
|
48
|
+
// query: getFiles,
|
|
49
|
+
// variables: { where: { id: { _in: ['1', '2', '3', '4'] } } }
|
|
50
|
+
// },
|
|
51
|
+
// result: {
|
|
52
|
+
// data: {
|
|
53
|
+
// getImages: [
|
|
54
|
+
// { id: '1', url: 'image1.jpg', caption: 'Caption 1', data: {} },
|
|
55
|
+
// { id: '2', url: 'image2.jpg', caption: 'Caption 2', data: {} },
|
|
56
|
+
// { id: '3', url: 'image3.jpg', caption: 'Caption 3', data: {} },
|
|
57
|
+
// { id: '4', url: 'image4.jpg', caption: 'Caption 4', data: {} }
|
|
58
|
+
// ]
|
|
59
|
+
// }
|
|
60
|
+
// }
|
|
61
|
+
// }
|
|
62
|
+
];
|
|
63
|
+
|
|
64
|
+
export default IMAGE_MOCKS;
|