@twreporter/react-article-components 1.5.0 → 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 +26 -0
- package/lib/components/body/embedded-code.js +95 -26
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,32 @@
|
|
|
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
|
+
|
|
6
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)
|
|
7
33
|
|
|
8
34
|
**Note:** Version bump only for package @twreporter/react-article-components
|
|
@@ -7,17 +7,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports["default"] = exports.Caption = exports.Block = void 0;
|
|
9
9
|
|
|
10
|
-
var
|
|
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
|
|
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
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
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 =
|
|
126
|
+
var node = _this._embedded.current;
|
|
116
127
|
|
|
117
|
-
var scripts = _.get(
|
|
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(
|
|
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
|
|
208
|
+
var _this$_embeddedCodeWi2;
|
|
163
209
|
|
|
164
|
-
var
|
|
165
|
-
caption = _$get.caption,
|
|
166
|
-
embeddedCodeWithoutScript = _$get.embeddedCodeWithoutScript;
|
|
210
|
+
var className = this.props.className;
|
|
167
211
|
|
|
168
|
-
|
|
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:
|
|
217
|
+
__html: this._embeddedCodeWithoutScript
|
|
174
218
|
}
|
|
175
|
-
}),
|
|
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.
|
|
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",
|
|
@@ -40,5 +40,5 @@
|
|
|
40
40
|
"files": [
|
|
41
41
|
"lib"
|
|
42
42
|
],
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "5ff16a85b38a7668e29e94a2d2e9d2ee8261bc52"
|
|
44
44
|
}
|