@kids-reporter/draft-renderer 1.0.11 → 1.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,10 +7,15 @@ exports.ImageBlock = ImageBlock;
7
7
  exports.ImageInArticleBody = ImageInArticleBody;
8
8
  exports.ImageInInfoBox = ImageInInfoBox;
9
9
  exports.InfoBoxContainer = void 0;
10
- var _react = _interopRequireDefault(require("react"));
11
- var _styledComponents = _interopRequireDefault(require("styled-components"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _styledComponents = _interopRequireWildcard(require("styled-components"));
12
+ var _debounce = _interopRequireDefault(require("lodash/debounce"));
12
13
  var _mediaQuery = require("../utils/media-query");
14
+ var _constants = require("../utils/constants");
13
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
17
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
18
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
14
19
  const Figure = _styledComponents.default.figure`
15
20
  width: 100%;
16
21
  `;
@@ -31,16 +36,29 @@ const FigureCaption = _styledComponents.default.figcaption`
31
36
  const Img = _styledComponents.default.img`
32
37
  width: 100%;
33
38
  object-fit: contain;
39
+ ${props => props.$isDesktopAndAbove ? 'cursor: zoom-in;' : ''};
34
40
  `;
35
41
  function ImageBlock({
36
42
  className = '',
37
43
  data
38
44
  }) {
45
+ const theme = (0, _styledComponents.useTheme)();
39
46
  const {
40
47
  desc,
41
48
  imageFile,
42
49
  resized
43
50
  } = data || {};
51
+ const [isDesktopAndAbove, setIsDesktopAndAbove] = (0, _react.useState)(false);
52
+ const handleWindowResize = (0, _debounce.default)(() => {
53
+ setIsDesktopAndAbove(window.innerWidth > _mediaQuery.breakpoints.desktop);
54
+ }, _constants.DEBOUNCE_THRESHOLD);
55
+ (0, _react.useEffect)(() => {
56
+ setIsDesktopAndAbove(window.innerWidth > _mediaQuery.breakpoints.desktop);
57
+ window.addEventListener('resize', handleWindowResize);
58
+ return () => {
59
+ window.removeEventListener('resize', handleWindowResize);
60
+ };
61
+ }, []);
44
62
  const aspectRatio = imageFile !== null && imageFile !== void 0 && imageFile.width && imageFile !== null && imageFile !== void 0 && imageFile.height ? `${imageFile.width}/${imageFile.height}` : '16/9';
45
63
  const imgSrcSetArr = [];
46
64
  if (resized !== null && resized !== void 0 && resized.medium) {
@@ -49,17 +67,25 @@ function ImageBlock({
49
67
  if (resized !== null && resized !== void 0 && resized.large) {
50
68
  imgSrcSetArr.push(`${resized.large} 1000w`);
51
69
  }
70
+ const commonImgProps = {
71
+ src: (resized === null || resized === void 0 ? void 0 : resized.original) ?? (resized === null || resized === void 0 ? void 0 : resized.medium),
72
+ sizes: '(min-width: 1200px) 1000px, 100vw',
73
+ srcSet: imgSrcSetArr.join(',')
74
+ };
52
75
  const imgBlock = /*#__PURE__*/_react.default.createElement(Figure, {
53
76
  className: className
54
- }, /*#__PURE__*/_react.default.createElement(Img, {
55
- alt: desc,
56
- src: (resized === null || resized === void 0 ? void 0 : resized.original) ?? (resized === null || resized === void 0 ? void 0 : resized.medium),
57
- srcSet: imgSrcSetArr.join(','),
58
- sizes: "(min-width: 1200px) 1000px, 100vw",
77
+ }, /*#__PURE__*/_react.default.createElement(Img, _extends({
78
+ alt: desc
79
+ }, commonImgProps, {
59
80
  style: {
60
81
  aspectRatio: aspectRatio
82
+ },
83
+ $isDesktopAndAbove: isDesktopAndAbove,
84
+ onClick: () => {
85
+ var _theme$handleImgModal;
86
+ return isDesktopAndAbove && (theme === null || theme === void 0 || (_theme$handleImgModal = theme.handleImgModalOpen) === null || _theme$handleImgModal === void 0 ? void 0 : _theme$handleImgModal.call(theme, commonImgProps));
61
87
  }
62
- }), desc && /*#__PURE__*/_react.default.createElement(FigureCaption, null, desc));
88
+ })), desc && /*#__PURE__*/_react.default.createElement(FigureCaption, null, desc));
63
89
  return imgBlock;
64
90
  }
65
91
  const ArticleBodyContainer = _styledComponents.default.div`
@@ -4,14 +4,19 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ImageLinkInInfoBox = exports.ImageLinkInArticleBody = exports.ImageLinkBlock = void 0;
7
- var _react = _interopRequireDefault(require("react"));
8
- var _styledComponents = _interopRequireDefault(require("styled-components"));
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _styledComponents = _interopRequireWildcard(require("styled-components"));
9
9
  var _draftJs = require("draft-js");
10
+ var _debounce = _interopRequireDefault(require("lodash/debounce"));
10
11
  var _imageBlock = require("./image-block");
11
12
  var _index = _interopRequireDefault(require("../block-render-maps/index"));
12
13
  var _index2 = require("../entity-decorators/index");
13
14
  var _mediaQuery = require("../utils/media-query");
15
+ var _constants = require("../utils/constants");
14
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
18
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
19
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
15
20
  const fallbackImg = '/assets/images/image_placeholder.png';
16
21
  const Figure = _styledComponents.default.figure`
17
22
  width: 100%;
@@ -19,23 +24,43 @@ const Figure = _styledComponents.default.figure`
19
24
  const Img = _styledComponents.default.img`
20
25
  width: 100%;
21
26
  object-fit: contain;
27
+ ${props => props.$isDesktopAndAbove ? 'cursor: zoom-in;' : ''};
22
28
  `;
23
29
  const ImageLinkBlock = ({
24
30
  className = '',
25
31
  data
26
32
  }) => {
33
+ const theme = (0, _styledComponents.useTheme)();
27
34
  const {
28
35
  url,
29
36
  rawContentState
30
37
  } = data;
38
+ const [isDesktopAndAbove, setIsDesktopAndAbove] = (0, _react.useState)(false);
39
+ const handleWindowResize = (0, _debounce.default)(() => {
40
+ setIsDesktopAndAbove(window.innerWidth > _mediaQuery.breakpoints.desktop);
41
+ }, _constants.DEBOUNCE_THRESHOLD);
42
+ (0, _react.useEffect)(() => {
43
+ setIsDesktopAndAbove(window.innerWidth > _mediaQuery.breakpoints.desktop);
44
+ window.addEventListener('resize', handleWindowResize);
45
+ return () => {
46
+ window.removeEventListener('resize', handleWindowResize);
47
+ };
48
+ }, []);
31
49
  const contentState = (0, _draftJs.convertFromRaw)(rawContentState);
32
50
  const editorState = _draftJs.EditorState.createWithContent(contentState, _index2.decorator);
33
51
  const blockRenderMap = _index.default.imageLink;
52
+ const commonImgProps = {
53
+ src: url ?? fallbackImg
54
+ };
34
55
  const imgBlock = /*#__PURE__*/_react.default.createElement(Figure, {
35
56
  className: className
36
- }, /*#__PURE__*/_react.default.createElement(Img, {
37
- src: url ?? fallbackImg
38
- }), /*#__PURE__*/_react.default.createElement(_draftJs.Editor, {
57
+ }, /*#__PURE__*/_react.default.createElement(Img, _extends({}, commonImgProps, {
58
+ $isDesktopAndAbove: isDesktopAndAbove,
59
+ onClick: () => {
60
+ var _theme$handleImgModal;
61
+ return isDesktopAndAbove && (theme === null || theme === void 0 || (_theme$handleImgModal = theme.handleImgModalOpen) === null || _theme$handleImgModal === void 0 ? void 0 : _theme$handleImgModal.call(theme, commonImgProps));
62
+ }
63
+ })), /*#__PURE__*/_react.default.createElement(_draftJs.Editor, {
39
64
  blockRenderMap: blockRenderMap,
40
65
  editorState: editorState,
41
66
  readOnly: true
@@ -28,6 +28,7 @@ const DraftRenderer = ({
28
28
  rawContentState,
29
29
  themeColor = _index2.ThemeColorEnum.RED,
30
30
  fontSizeLevel = FontSizeLevel.NORMAL,
31
+ handleImgModalOpen = undefined,
31
32
  initiallyScrollTo = '',
32
33
  offsetTop = 0
33
34
  }) => {
@@ -47,7 +48,8 @@ const DraftRenderer = ({
47
48
  theme: {
48
49
  themeColor,
49
50
  fontSizeLevel,
50
- offsetTop
51
+ offsetTop,
52
+ handleImgModalOpen
51
53
  }
52
54
  }, /*#__PURE__*/_react.default.createElement(_draftJs.Editor, {
53
55
  editorState: editorState,
@@ -3,9 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.colorHex = void 0;
6
+ exports.colorHex = exports.DEBOUNCE_THRESHOLD = void 0;
7
7
  const colorHex = exports.colorHex = {
8
8
  blue: '#27B5F7',
9
9
  red: '#F76977',
10
10
  yellow: '#F8C341'
11
- };
11
+ };
12
+ const DEBOUNCE_THRESHOLD = exports.DEBOUNCE_THRESHOLD = 100;
@@ -7,6 +7,8 @@ exports.mediaQuery = exports.breakpoints = void 0;
7
7
  const breakpoints = exports.breakpoints = {
8
8
  small: 320,
9
9
  medium: 760,
10
+ desktop: 1024,
11
+ // TODO: unify breakpoints in twreporter/kids reporter
10
12
  large: 1440
11
13
  };
12
14
  const mediaQuery = exports.mediaQuery = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kids-reporter/draft-renderer",
3
- "version": "1.0.11",
3
+ "version": "1.0.12",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -25,6 +25,7 @@
25
25
  "babel-loader": "^8.2.5",
26
26
  "body-scroll-lock": "3.1.5",
27
27
  "html-webpack-plugin": "^5.5.0",
28
+ "lodash": "^4.17.21",
28
29
  "webpack": "^5.72.1",
29
30
  "webpack-cli": "^4.9.2"
30
31
  },