@twreporter/react-article-components 1.5.0-rc.4 → 1.6.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,51 @@
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
+ # [1.6.0-rc.0](https://github.com/twreporter/twreporter-npm-packages/compare/@twreporter/react-article-components@1.5.0...@twreporter/react-article-components@1.6.0-rc.0) (2022-07-08)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * add comment ([1d1ef89](https://github.com/twreporter/twreporter-npm-packages/commit/1d1ef89b9aeacecc225b0875e7ebec27459aac1d))
12
+ * add destructor ([3b0e699](https://github.com/twreporter/twreporter-npm-packages/commit/3b0e69973d95d561d95b0b4933ac45de112869d0))
13
+ * refactor import ([f514e5b](https://github.com/twreporter/twreporter-npm-packages/commit/f514e5b78a84cfad55259b423502068094ed04de))
14
+ * refactor private members ([90fe033](https://github.com/twreporter/twreporter-npm-packages/commit/90fe033615a5860f2a05bad2f5987ee0835bce13))
15
+ * rename constant ([7195d43](https://github.com/twreporter/twreporter-npm-packages/commit/7195d437014664f5939e84681344f7b3509b8473))
16
+ * rewire execute script logic ([762f57e](https://github.com/twreporter/twreporter-npm-packages/commit/762f57efd309447e4b20e95f598cb552735e9746))
17
+ * rewire loading logic ([98f368d](https://github.com/twreporter/twreporter-npm-packages/commit/98f368d0e6dde093f6f40abbe197c3d2354d1bf3))
18
+ * shorter keyword to infogram ([260d83c](https://github.com/twreporter/twreporter-npm-packages/commit/260d83c71ff877685f76f9f1d53e5a656d537923))
19
+ * simplify isLoaded ([5872dbb](https://github.com/twreporter/twreporter-npm-packages/commit/5872dbb3a7bf929388949fab55f3d3c809af56bd))
20
+
21
+
22
+ ### Features
23
+
24
+ * add load script ([7136740](https://github.com/twreporter/twreporter-npm-packages/commit/7136740ad4f8152dc92bfcdb677924a7f1b37613))
25
+ * add waypoint wrapper ([0a02cdf](https://github.com/twreporter/twreporter-npm-packages/commit/0a02cdf7cd0e5d53e8c62cf1666be51688464784))
26
+ * enable delay loading of infogram ([e312e97](https://github.com/twreporter/twreporter-npm-packages/commit/e312e97fcc000a7bf211f55db5675a08cee99ee9))
27
+
28
+
29
+
30
+
31
+
32
+ # [1.5.0](https://github.com/twreporter/twreporter-npm-packages/compare/@twreporter/react-article-components@1.5.0-rc.5...@twreporter/react-article-components@1.5.0) (2022-07-06)
33
+
34
+ **Note:** Version bump only for package @twreporter/react-article-components
35
+
36
+
37
+
38
+
39
+
40
+ # [1.5.0-rc.5](https://github.com/twreporter/twreporter-npm-packages/compare/@twreporter/react-article-components@1.5.0-rc.4...@twreporter/react-article-components@1.5.0-rc.5) (2022-07-04)
41
+
42
+
43
+ ### Bug Fixes
44
+
45
+ * fix tool bar defect ([afc4a56](https://github.com/twreporter/twreporter-npm-packages/commit/afc4a568c27c0614ff2bec460cb07813fbfdfe5a))
46
+
47
+
48
+
49
+
50
+
6
51
  # [1.5.0-rc.4](https://github.com/twreporter/twreporter-npm-packages/compare/@twreporter/react-article-components@1.5.0-rc.3...@twreporter/react-article-components@1.5.0-rc.4) (2022-07-01)
7
52
 
8
53
 
@@ -81,14 +81,14 @@ var ShareContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
81
81
  var OptionContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
82
82
  displayName: "mobile-tool-bar__OptionContainer",
83
83
  componentId: "do65sv-2"
84
- })(["opacity:", ";transition:opacity 100ms;position:absolute;top:-55px;left:50%;transform:translateX(-50%);display:flex;"], function (props) {
84
+ })(["z-index:6;opacity:", ";transition:opacity 100ms;position:absolute;top:-55px;left:50%;transform:translateX(-50%);display:flex;"], function (props) {
85
85
  return props.isShow ? '1' : '0';
86
86
  });
87
87
 
88
88
  var SnackBarContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
89
89
  displayName: "mobile-tool-bar__SnackBarContainer",
90
90
  componentId: "do65sv-3"
91
- })(["opacity:", ";position:absolute;left:50%;transform:translateX(-50%);transition:opacity 100ms;"], function (props) {
91
+ })(["z-index:5;opacity:", ";position:absolute;left:50%;transform:translateX(-50%);transition:opacity 100ms;"], function (props) {
92
92
  return props.showSnackBar ? '1' : '0';
93
93
  });
94
94
 
@@ -351,7 +351,9 @@ var BookmarkBlock = function BookmarkBlock(_ref6) {
351
351
  var handleClick = function handleClick() {
352
352
  var action = isBookmarked ? removeAction : addAction;
353
353
  action();
354
- toastr(isBookmarked);
354
+ setTimeout(function () {
355
+ toastr(isBookmarked);
356
+ }, 500);
355
357
  };
356
358
 
357
359
  return /*#__PURE__*/_react["default"].createElement(ButtonContainer, {
@@ -7,17 +7,13 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports["default"] = exports.Caption = exports.Block = void 0;
9
9
 
10
- var _body = _interopRequireDefault(require("../../constants/prop-types/body"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
11
 
12
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
13
 
14
- var _react = _interopRequireDefault(require("react"));
15
-
16
14
  var _styledComponents = _interopRequireDefault(require("styled-components"));
17
15
 
18
- var _theme = _interopRequireDefault(require("../../constants/theme"));
19
-
20
- var _color = _interopRequireDefault(require("../../constants/color"));
16
+ var _reactWaypoint = require("react-waypoint");
21
17
 
22
18
  var _forEach = _interopRequireDefault(require("lodash/forEach"));
23
19
 
@@ -25,8 +21,20 @@ var _get = _interopRequireDefault(require("lodash/get"));
25
21
 
26
22
  var _merge = _interopRequireDefault(require("lodash/merge"));
27
23
 
24
+ var _theme = _interopRequireDefault(require("../../constants/theme"));
25
+
26
+ var _color = _interopRequireDefault(require("../../constants/color"));
27
+
28
+ var _body = _interopRequireDefault(require("../../constants/prop-types/body"));
29
+
28
30
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
29
31
 
32
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
33
+
34
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
35
+
36
+ function _extends() { _extends = Object.assign || 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); }
37
+
30
38
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
31
39
 
32
40
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
@@ -92,6 +100,8 @@ function dispatchWindowLoadEvent() {
92
100
  window.dispatchEvent(loadEvent);
93
101
  }
94
102
 
103
+ var infogramEmbed = 'infogram';
104
+
95
105
  var EmbeddedCode = /*#__PURE__*/function (_React$PureComponent) {
96
106
  _inherits(EmbeddedCode, _React$PureComponent);
97
107
 
@@ -103,18 +113,19 @@ var EmbeddedCode = /*#__PURE__*/function (_React$PureComponent) {
103
113
  _classCallCheck(this, EmbeddedCode);
104
114
 
105
115
  _this = _super.call(this, props);
106
- _this._embedded = /*#__PURE__*/_react["default"].createRef();
107
- return _this;
108
- }
109
116
 
110
- _createClass(EmbeddedCode, [{
111
- key: "componentDidMount",
112
- value: function componentDidMount() {
113
- var _this2 = this;
117
+ _defineProperty(_assertThisInitialized(_this), "state", {
118
+ isLoaded: false
119
+ });
120
+
121
+ _defineProperty(_assertThisInitialized(_this), "executeScript", function () {
122
+ _this.setState({
123
+ isLoaded: true
124
+ });
114
125
 
115
- var node = this._embedded.current;
126
+ var node = _this._embedded.current;
116
127
 
117
- var scripts = _.get(this.props, ['data', 'content', 0, 'scripts']);
128
+ var scripts = _.get(_this.props, ['data', 'content', 0, 'scripts']);
118
129
 
119
130
  if (node && Array.isArray(scripts)) {
120
131
  var scriptsCount = scripts.length;
@@ -129,7 +140,7 @@ var EmbeddedCode = /*#__PURE__*/function (_React$PureComponent) {
129
140
  try {
130
141
  scriptEle.setAttribute(name, value);
131
142
  } catch (err) {
132
- console.error('Failed to set an attribute to the embbeded script.\n', "embedded element id: ".concat(_.get(_this2.props, 'data.id', ''), "\n"), "attribute name: ".concat(name, "\n"), "attribute value: ".concat(value, "\n"), 'error:\n', err);
143
+ console.error('Failed to set an attribute to the embbeded script.\n', "embedded element id: ".concat(_.get(_this.props, 'data.id', ''), "\n"), "attribute name: ".concat(name, "\n"), "attribute value: ".concat(value, "\n"), 'error:\n', err);
133
144
  }
134
145
  });
135
146
 
@@ -155,31 +166,71 @@ var EmbeddedCode = /*#__PURE__*/function (_React$PureComponent) {
155
166
 
156
167
  node.appendChild(scriptsFragment);
157
168
  }
169
+ });
170
+
171
+ _defineProperty(_assertThisInitialized(_this), "loadEmbed", function () {
172
+ if (!_this.state.isLoaded) {
173
+ _this.executeScript();
174
+ }
175
+ });
176
+
177
+ _this._embedded = /*#__PURE__*/_react["default"].createRef();
178
+
179
+ var _$get = _.get(_this.props, ['data', 'content', 0], {}),
180
+ caption = _$get.caption,
181
+ embeddedCodeWithoutScript = _$get.embeddedCodeWithoutScript;
182
+
183
+ _this._caption = caption;
184
+ _this._embeddedCodeWithoutScript = embeddedCodeWithoutScript;
185
+ return _this;
186
+ }
187
+
188
+ _createClass(EmbeddedCode, [{
189
+ key: "componentDidMount",
190
+ value: function componentDidMount() {
191
+ var _this$_embeddedCodeWi;
192
+
193
+ // Delay loading infogram in loadEmbed()
194
+ if (!((_this$_embeddedCodeWi = this._embeddedCodeWithoutScript) !== null && _this$_embeddedCodeWi !== void 0 && _this$_embeddedCodeWi.includes(infogramEmbed))) {
195
+ this.executeScript();
196
+ }
197
+ }
198
+ }, {
199
+ key: "componentWillUnmount",
200
+ value: function componentWillUnmount() {
201
+ this._embedded = null;
202
+ this._caption = null;
203
+ this._embeddedCodeWithoutScript = null;
158
204
  }
159
205
  }, {
160
206
  key: "render",
161
207
  value: function render() {
162
- var className = this.props.className;
208
+ var _this$_embeddedCodeWi2;
163
209
 
164
- var _$get = _.get(this.props, ['data', 'content', 0], {}),
165
- caption = _$get.caption,
166
- embeddedCodeWithoutScript = _$get.embeddedCodeWithoutScript;
210
+ var className = this.props.className;
167
211
 
168
- return /*#__PURE__*/_react["default"].createElement("div", {
212
+ var embed = /*#__PURE__*/_react["default"].createElement("div", {
169
213
  className: className
170
214
  }, /*#__PURE__*/_react["default"].createElement(Block, {
171
215
  ref: this._embedded,
172
216
  dangerouslySetInnerHTML: {
173
- __html: embeddedCodeWithoutScript
217
+ __html: this._embeddedCodeWithoutScript
174
218
  }
175
- }), caption ? /*#__PURE__*/_react["default"].createElement(Caption, null, caption) : null);
219
+ }), this._caption ? /*#__PURE__*/_react["default"].createElement(Caption, null, this._caption) : null);
220
+
221
+ if ((_this$_embeddedCodeWi2 = this._embeddedCodeWithoutScript) !== null && _this$_embeddedCodeWi2 !== void 0 && _this$_embeddedCodeWi2.includes(infogramEmbed)) {
222
+ return this.state.isLoaded ? embed : null;
223
+ }
224
+
225
+ return embed;
176
226
  }
177
227
  }]);
178
228
 
179
229
  return EmbeddedCode;
180
- }(_react["default"].PureComponent);
230
+ }(_react["default"].PureComponent); // Serious layout shifts show up when loading bunch of infograms due to lack of heights,
231
+ // so here we apply waypoint wrapper to load infogram dynamically to avoid layout shifts for anchors.
232
+ // https://twreporter-org.atlassian.net/browse/TWREPORTER-60
181
233
 
182
- exports["default"] = EmbeddedCode;
183
234
 
184
235
  _defineProperty(EmbeddedCode, "propTypes", {
185
236
  className: _propTypes["default"].string,
@@ -188,4 +239,22 @@ _defineProperty(EmbeddedCode, "propTypes", {
188
239
 
189
240
  _defineProperty(EmbeddedCode, "defaultProps", {
190
241
  className: ''
191
- });
242
+ });
243
+
244
+ var WayPointWrapper = function WayPointWrapper(props) {
245
+ var embedRef = (0, _react.useRef)(null);
246
+
247
+ var onEnter = function onEnter() {
248
+ embedRef.current.loadEmbed();
249
+ };
250
+
251
+ return /*#__PURE__*/_react["default"].createElement(_reactWaypoint.Waypoint, {
252
+ onEnter: onEnter,
253
+ fireOnRapidScroll: false
254
+ }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(EmbeddedCode, _extends({}, props, {
255
+ ref: embedRef
256
+ }))));
257
+ };
258
+
259
+ var _default = WayPointWrapper;
260
+ exports["default"] = _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twreporter/react-article-components",
3
- "version": "1.5.0-rc.4",
3
+ "version": "1.6.0-rc.0",
4
4
  "description": "The Reporter react article components, which are used in article page",
5
5
  "main": "lib/components/article-page.js",
6
6
  "repository": "https://github.com/twreporter/twreporter-npm-packages.git",
@@ -25,9 +25,9 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "@twreporter/core": "^1.4.1",
28
- "@twreporter/react-components": "^8.10.0-rc.3",
29
- "@twreporter/redux": "^7.2.2-rc.0",
30
- "@twreporter/universal-header": "^2.2.10-rc.3",
28
+ "@twreporter/react-components": "^8.10.0",
29
+ "@twreporter/redux": "^7.2.2",
30
+ "@twreporter/universal-header": "^2.2.10",
31
31
  "howler": "^2.2.3",
32
32
  "lodash": "^4.17.11",
33
33
  "memoize-one": "^5.0.5",
@@ -40,5 +40,5 @@
40
40
  "files": [
41
41
  "lib"
42
42
  ],
43
- "gitHead": "aa5fa9054d067e7282c8487a431320910863db28"
43
+ "gitHead": "5ff16a85b38a7668e29e94a2d2e9d2ee8261bc52"
44
44
  }