@twreporter/react-article-components 2.3.0-rc.2 → 2.3.0-rc.4
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 +22 -0
- package/lib/components/article-page.js +6 -3
- package/lib/components/aside/desktop-aside.js +8 -3
- package/lib/components/aside/desktop-tools.js +72 -22
- package/lib/components/aside/mobile-tool-bar.js +97 -56
- package/lib/components/img-with-placeholder/index.js +1 -1
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,28 @@
|
|
|
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
|
+
# [2.3.0-rc.4](https://github.com/twreporter/twreporter-npm-packages/compare/@twreporter/react-article-components@2.3.0-rc.3...@twreporter/react-article-components@2.3.0-rc.4) (2024-07-10)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* add dependency ([ca886a7](https://github.com/twreporter/twreporter-npm-packages/commit/ca886a7b44f0872eb05dafdc47682fea1b089141))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# [2.3.0-rc.3](https://github.com/twreporter/twreporter-npm-packages/compare/@twreporter/react-article-components@2.3.0-rc.2...@twreporter/react-article-components@2.3.0-rc.3) (2024-07-09)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
* replace bookmarkWidget by useBookmark ([1c2c3d5](https://github.com/twreporter/twreporter-npm-packages/commit/1c2c3d559b2f4f536b02e52c5c51a11c58817f23))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
6
28
|
# [2.3.0-rc.2](https://github.com/twreporter/twreporter-npm-packages/compare/@twreporter/react-article-components@2.3.0-rc.1...@twreporter/react-article-components@2.3.0-rc.2) (2024-07-09)
|
|
7
29
|
|
|
8
30
|
|
|
@@ -325,7 +325,8 @@ var Article = exports["default"] = /*#__PURE__*/function (_PureComponent) {
|
|
|
325
325
|
}), /*#__PURE__*/_react["default"].createElement(DesktopToolsBlock, null, /*#__PURE__*/_react["default"].createElement(_desktopTools["default"], {
|
|
326
326
|
articleMetaForBookmark: articleMetaForBookmark,
|
|
327
327
|
backToTopic: backToTopic,
|
|
328
|
-
onFontLevelChange: this.changeFontLevel
|
|
328
|
+
onFontLevelChange: this.changeFontLevel,
|
|
329
|
+
bookmarkId: Number(post.bookmarkId)
|
|
329
330
|
})));
|
|
330
331
|
return /*#__PURE__*/_react["default"].createElement(_reactRedux.Provider, {
|
|
331
332
|
store: store
|
|
@@ -347,7 +348,8 @@ var Article = exports["default"] = /*#__PURE__*/function (_PureComponent) {
|
|
|
347
348
|
backToTopic: backToTopic,
|
|
348
349
|
articleMetaForBookmark: articleMetaForBookmark,
|
|
349
350
|
onFontLevelChange: this.changeFontLevel,
|
|
350
|
-
scrollStage: this.state.scrollStage
|
|
351
|
+
scrollStage: this.state.scrollStage,
|
|
352
|
+
bookmarkId: Number(post.bookmarkId)
|
|
351
353
|
}), /*#__PURE__*/_react["default"].createElement(DesktopAsideBlock, null, /*#__PURE__*/_react["default"].createElement(_desktopAside["default"], {
|
|
352
354
|
backToTopic: backToTopic,
|
|
353
355
|
categorySet: post.category_set,
|
|
@@ -359,7 +361,8 @@ var Article = exports["default"] = /*#__PURE__*/function (_PureComponent) {
|
|
|
359
361
|
engineers: post.engineers,
|
|
360
362
|
rawAutherText: post.extend_byline,
|
|
361
363
|
onFontLevelChange: this.changeFontLevel,
|
|
362
|
-
articleMetaForBookmark: articleMetaForBookmark
|
|
364
|
+
articleMetaForBookmark: articleMetaForBookmark,
|
|
365
|
+
bookmarkId: Number(post.bookmarkId)
|
|
363
366
|
})), metadataAndToolsJSX, /*#__PURE__*/_react["default"].createElement(ContentBlock, null, /*#__PURE__*/_react["default"].createElement(_body["default"], {
|
|
364
367
|
key: _.get(post, 'slug', 'article-page-body-key'),
|
|
365
368
|
brief: _.get(post, 'brief.api_data'),
|
|
@@ -10,6 +10,7 @@ var _desktopTools = _interopRequireDefault(require("./desktop-tools"));
|
|
|
10
10
|
var _aside = _interopRequireDefault(require("../../constants/prop-types/aside"));
|
|
11
11
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
12
12
|
var _reactWaypoint = require("react-waypoint");
|
|
13
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
14
15
|
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; }
|
|
15
16
|
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; }
|
|
@@ -131,7 +132,8 @@ var Aside = exports["default"] = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
131
132
|
rawAutherText = _this$props.rawAutherText,
|
|
132
133
|
tags = _this$props.tags,
|
|
133
134
|
title = _this$props.title,
|
|
134
|
-
writers = _this$props.writers
|
|
135
|
+
writers = _this$props.writers,
|
|
136
|
+
bookmarkId = _this$props.bookmarkId;
|
|
135
137
|
var metadataJSX = /*#__PURE__*/_react["default"].createElement(_metadata["default"], {
|
|
136
138
|
categories: categories,
|
|
137
139
|
categorySet: categorySet,
|
|
@@ -156,7 +158,8 @@ var Aside = exports["default"] = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
156
158
|
height: "".concat(toolsHeight, "px"),
|
|
157
159
|
title: title,
|
|
158
160
|
onFontLevelChange: onFontLevelChange,
|
|
159
|
-
articleMetaForBookmark: articleMetaForBookmark
|
|
161
|
+
articleMetaForBookmark: articleMetaForBookmark,
|
|
162
|
+
bookmarkId: bookmarkId
|
|
160
163
|
})), /*#__PURE__*/_react["default"].createElement(_reactWaypoint.Waypoint, {
|
|
161
164
|
onEnter: this.setToolsBottom,
|
|
162
165
|
onLeave: this.setToolsFixed,
|
|
@@ -168,4 +171,6 @@ var Aside = exports["default"] = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
168
171
|
}]);
|
|
169
172
|
return Aside;
|
|
170
173
|
}(_react["default"].PureComponent);
|
|
171
|
-
_defineProperty(Aside, "propTypes", _objectSpread(_objectSpread({}, _aside["default"].metadata), _aside["default"].tools)
|
|
174
|
+
_defineProperty(Aside, "propTypes", _objectSpread(_objectSpread(_objectSpread({}, _aside["default"].metadata), _aside["default"].tools), {}, {
|
|
175
|
+
bookmarkId: _propTypes["default"].number
|
|
176
|
+
}));
|
|
@@ -9,18 +9,31 @@ var _dynamicComponentsContext = _interopRequireDefault(require("../../contexts/d
|
|
|
9
9
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
10
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
12
|
+
var _reactRedux = require("react-redux");
|
|
12
13
|
var _theme = _interopRequireDefault(require("../../constants/theme"));
|
|
13
14
|
var _aside = _interopRequireDefault(require("../../constants/prop-types/aside"));
|
|
14
15
|
var _icon = require("@twreporter/react-components/lib/icon");
|
|
15
|
-
var _bookmarkWidget = _interopRequireDefault(require("@twreporter/react-components/lib/bookmark-widget"));
|
|
16
16
|
var _mediaQuery = _interopRequireDefault(require("@twreporter/core/lib/utils/media-query"));
|
|
17
17
|
var _color = require("@twreporter/core/lib/constants/color");
|
|
18
|
+
var _hook = require("@twreporter/react-components/lib/hook");
|
|
19
|
+
var _enum = require("@twreporter/react-components/lib/icon/enum");
|
|
18
20
|
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5; // constants
|
|
19
21
|
// icons
|
|
20
22
|
// @twreporter
|
|
21
23
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
22
24
|
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; }
|
|
23
25
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
26
|
+
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; }
|
|
27
|
+
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; }
|
|
28
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
29
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
30
|
+
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
31
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
32
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
33
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
34
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
35
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
36
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
24
37
|
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
25
38
|
function changeFontSizeOffsetToPct(fontSizeOffset) {
|
|
26
39
|
switch (fontSizeOffset) {
|
|
@@ -126,29 +139,62 @@ function LineShareBT(props) {
|
|
|
126
139
|
}));
|
|
127
140
|
}
|
|
128
141
|
var BookmarkBlock = function BookmarkBlock(_ref) {
|
|
129
|
-
var articleMeta = _ref.articleMeta
|
|
142
|
+
var articleMeta = _ref.articleMeta,
|
|
143
|
+
bookmarkId = _ref.bookmarkId;
|
|
130
144
|
var themeContext = (0, _react.useContext)(_styledComponents.ThemeContext);
|
|
131
145
|
var releaseBranch = themeContext.releaseBranch;
|
|
132
|
-
var
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
id: id
|
|
139
|
-
}, /*#__PURE__*/_react["default"].createElement(_icon.Bookmark, {
|
|
140
|
-
type: iconType,
|
|
141
|
-
releaseBranch: releaseBranch
|
|
142
|
-
}));
|
|
143
|
-
};
|
|
144
|
-
return /*#__PURE__*/_react["default"].createElement(_bookmarkWidget["default"], {
|
|
145
|
-
toAutoCheck: true,
|
|
146
|
-
articleMeta: articleMeta,
|
|
147
|
-
renderIcon: renderIcon
|
|
146
|
+
var _useBookmark = (0, _hook.useBookmark)(),
|
|
147
|
+
addAction = _useBookmark.addAction,
|
|
148
|
+
removeAction = _useBookmark.removeAction;
|
|
149
|
+
var bookmarkIdFromState = (0, _reactRedux.useSelector)(function (state) {
|
|
150
|
+
var _state$bookmarkWidget;
|
|
151
|
+
return (_state$bookmarkWidget = state.bookmarkWidget) === null || _state$bookmarkWidget === void 0 || (_state$bookmarkWidget = _state$bookmarkWidget.bookmark) === null || _state$bookmarkWidget === void 0 ? void 0 : _state$bookmarkWidget.id;
|
|
148
152
|
});
|
|
153
|
+
var _useState = (0, _react.useState)(false),
|
|
154
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
155
|
+
isBookmarked = _useState2[0],
|
|
156
|
+
setIsBookmarked = _useState2[1];
|
|
157
|
+
var _useState3 = (0, _react.useState)(_enum.BookmarkType.ADD),
|
|
158
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
159
|
+
iconType = _useState4[0],
|
|
160
|
+
setIconType = _useState4[1];
|
|
161
|
+
var _useState5 = (0, _react.useState)('add-bookmark'),
|
|
162
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
163
|
+
elementId = _useState6[0],
|
|
164
|
+
setElementId = _useState6[1];
|
|
165
|
+
var handleAddBookmark = function handleAddBookmark() {
|
|
166
|
+
addAction(articleMeta);
|
|
167
|
+
};
|
|
168
|
+
var handleRemoveBookmark = function handleRemoveBookmark() {
|
|
169
|
+
var targetBookmarkId = bookmarkId || bookmarkIdFromState;
|
|
170
|
+
removeAction(targetBookmarkId);
|
|
171
|
+
setIsBookmarked(function () {
|
|
172
|
+
return false;
|
|
173
|
+
});
|
|
174
|
+
};
|
|
175
|
+
(0, _react.useEffect)(function () {
|
|
176
|
+
if (bookmarkId || bookmarkIdFromState) {
|
|
177
|
+
setIsBookmarked(true);
|
|
178
|
+
} else {
|
|
179
|
+
setIsBookmarked(false);
|
|
180
|
+
}
|
|
181
|
+
}, [bookmarkId, bookmarkIdFromState]);
|
|
182
|
+
(0, _react.useEffect)(function () {
|
|
183
|
+
setIconType(isBookmarked ? _enum.BookmarkType.SAVED : _enum.BookmarkType.ADD);
|
|
184
|
+
setElementId(isBookmarked ? 'remove-bookmark' : 'add-bookmark');
|
|
185
|
+
}, [isBookmarked]);
|
|
186
|
+
return /*#__PURE__*/_react["default"].createElement(BookmarkIconBlock, {
|
|
187
|
+
onClick: isBookmarked ? handleRemoveBookmark : handleAddBookmark,
|
|
188
|
+
$isBookmarked: isBookmarked,
|
|
189
|
+
id: elementId
|
|
190
|
+
}, /*#__PURE__*/_react["default"].createElement(_icon.Bookmark, {
|
|
191
|
+
type: iconType,
|
|
192
|
+
releaseBranch: releaseBranch
|
|
193
|
+
}));
|
|
149
194
|
};
|
|
150
195
|
BookmarkBlock.propTypes = {
|
|
151
|
-
articleMeta: _aside["default"].tools.articleMetaForBookmark
|
|
196
|
+
articleMeta: _aside["default"].tools.articleMetaForBookmark,
|
|
197
|
+
bookmarkId: _propTypes["default"].number
|
|
152
198
|
};
|
|
153
199
|
var BackToTopic = function BackToTopic(_ref2) {
|
|
154
200
|
var backToTopic = _ref2.backToTopic;
|
|
@@ -172,7 +218,8 @@ var Tools = function Tools(_ref3) {
|
|
|
172
218
|
fbAppID = _ref3.fbAppID,
|
|
173
219
|
height = _ref3.height,
|
|
174
220
|
onFontLevelChange = _ref3.onFontLevelChange,
|
|
175
|
-
articleMetaForBookmark = _ref3.articleMetaForBookmark
|
|
221
|
+
articleMetaForBookmark = _ref3.articleMetaForBookmark,
|
|
222
|
+
bookmarkId = _ref3.bookmarkId;
|
|
176
223
|
var themeContext = (0, _react.useContext)(_styledComponents.ThemeContext);
|
|
177
224
|
var releaseBranch = themeContext.releaseBranch;
|
|
178
225
|
var backToTopicJSX = backToTopic ? /*#__PURE__*/_react["default"].createElement(BackToTopic, {
|
|
@@ -184,7 +231,8 @@ var Tools = function Tools(_ref3) {
|
|
|
184
231
|
return /*#__PURE__*/_react["default"].createElement(ToolsBlock, {
|
|
185
232
|
$height: height
|
|
186
233
|
}, backToTopicJSX, /*#__PURE__*/_react["default"].createElement(BookmarkBlock, {
|
|
187
|
-
articleMeta: articleMetaForBookmark
|
|
234
|
+
articleMeta: articleMetaForBookmark,
|
|
235
|
+
bookmarkId: bookmarkId
|
|
188
236
|
}), /*#__PURE__*/_react["default"].createElement(TextIconBlock, null, /*#__PURE__*/_react["default"].createElement(_icon.Text, {
|
|
189
237
|
onClick: onFontLevelChange,
|
|
190
238
|
releaseBranch: releaseBranch
|
|
@@ -195,5 +243,7 @@ var Tools = function Tools(_ref3) {
|
|
|
195
243
|
appID: fbAppID || defaultFbAppID
|
|
196
244
|
}), /*#__PURE__*/_react["default"].createElement(TwitterShareBT, null), /*#__PURE__*/_react["default"].createElement(LineShareBT, null));
|
|
197
245
|
};
|
|
198
|
-
Tools.propTypes = _aside["default"].tools
|
|
246
|
+
Tools.propTypes = _objectSpread(_objectSpread({}, _aside["default"].tools), {}, {
|
|
247
|
+
bookmarkId: _propTypes["default"].number
|
|
248
|
+
});
|
|
199
249
|
var _default = exports["default"] = Tools;
|
|
@@ -8,17 +8,18 @@ exports["default"] = void 0;
|
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
10
10
|
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
11
|
+
var _reactRedux = require("react-redux");
|
|
11
12
|
var _dynamicComponentsContext = _interopRequireDefault(require("../../contexts/dynamic-components-context"));
|
|
12
13
|
var _aside = _interopRequireDefault(require("../../constants/prop-types/aside"));
|
|
13
14
|
var _theme = _interopRequireDefault(require("../../constants/theme"));
|
|
14
15
|
var _anchor = require("../../constants/anchor");
|
|
15
16
|
var _theme2 = require("./utils/theme");
|
|
16
17
|
var _hook = require("@twreporter/react-components/lib/hook");
|
|
17
|
-
var _bookmarkWidget = _interopRequireDefault(require("@twreporter/react-components/lib/bookmark-widget"));
|
|
18
18
|
var _icon = require("@twreporter/react-components/lib/icon");
|
|
19
19
|
var _button = require("@twreporter/react-components/lib/button");
|
|
20
20
|
var _snackBar = require("@twreporter/react-components/lib/snack-bar");
|
|
21
21
|
var _zIndex = _interopRequireDefault(require("@twreporter/core/lib/constants/z-index"));
|
|
22
|
+
var _enum = require("@twreporter/react-components/lib/icon/enum");
|
|
22
23
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
23
24
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
24
25
|
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; }
|
|
@@ -272,59 +273,88 @@ FontLevel.propTypes = {
|
|
|
272
273
|
changeFontLevel: _aside["default"].tools.onFontLevelChange
|
|
273
274
|
};
|
|
274
275
|
var BookmarkBlock = function BookmarkBlock(_ref6) {
|
|
275
|
-
var articleMeta = _ref6.articleMeta
|
|
276
|
+
var articleMeta = _ref6.articleMeta,
|
|
277
|
+
bookmarkId = _ref6.bookmarkId;
|
|
276
278
|
var _useContext3 = (0, _react.useContext)(ToolBarContext),
|
|
277
279
|
hideText = _useContext3.hideText,
|
|
278
280
|
toastr = _useContext3.toastr;
|
|
279
281
|
var themeContext = (0, _react.useContext)(_styledComponents.ThemeContext);
|
|
280
282
|
var theme = themeContext.name === _theme["default"].article.v2.photo ? 'photography' : 'normal';
|
|
281
283
|
var releaseBranch = themeContext.releaseBranch;
|
|
282
|
-
var
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
var
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
return _context2.stop();
|
|
308
|
-
}
|
|
309
|
-
}, _callee2, null, [[1, 6]]);
|
|
310
|
-
}));
|
|
311
|
-
return function handleClick() {
|
|
312
|
-
return _ref7.apply(this, arguments);
|
|
313
|
-
};
|
|
314
|
-
}();
|
|
315
|
-
return /*#__PURE__*/_react["default"].createElement(ButtonContainer, {
|
|
316
|
-
onClick: handleClick,
|
|
317
|
-
id: id
|
|
318
|
-
}, /*#__PURE__*/_react["default"].createElement(_button.IconWithTextButton, {
|
|
319
|
-
text: text,
|
|
320
|
-
iconComponent: /*#__PURE__*/_react["default"].createElement(_icon.Bookmark, {
|
|
321
|
-
type: iconType,
|
|
322
|
-
releaseBranch: releaseBranch
|
|
323
|
-
}),
|
|
324
|
-
theme: theme,
|
|
325
|
-
hideText: hideText
|
|
326
|
-
}));
|
|
284
|
+
var _useBookmark = (0, _hook.useBookmark)(),
|
|
285
|
+
addAction = _useBookmark.addAction,
|
|
286
|
+
removeAction = _useBookmark.removeAction;
|
|
287
|
+
var bookmarkIdFromState = (0, _reactRedux.useSelector)(function (state) {
|
|
288
|
+
var _state$bookmarkWidget;
|
|
289
|
+
return (_state$bookmarkWidget = state.bookmarkWidget) === null || _state$bookmarkWidget === void 0 || (_state$bookmarkWidget = _state$bookmarkWidget.bookmark) === null || _state$bookmarkWidget === void 0 ? void 0 : _state$bookmarkWidget.id;
|
|
290
|
+
});
|
|
291
|
+
var _useState3 = (0, _react.useState)(false),
|
|
292
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
293
|
+
isBookmarked = _useState4[0],
|
|
294
|
+
setIsBookmarked = _useState4[1];
|
|
295
|
+
var _useState5 = (0, _react.useState)(_enum.BookmarkType.ADD),
|
|
296
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
297
|
+
iconType = _useState6[0],
|
|
298
|
+
setIconType = _useState6[1];
|
|
299
|
+
var _useState7 = (0, _react.useState)('add-bookmark'),
|
|
300
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
301
|
+
elementId = _useState8[0],
|
|
302
|
+
setElementId = _useState8[1];
|
|
303
|
+
var _useState9 = (0, _react.useState)('收藏'),
|
|
304
|
+
_useState10 = _slicedToArray(_useState9, 2),
|
|
305
|
+
buttonText = _useState10[0],
|
|
306
|
+
setButtonText = _useState10[1];
|
|
307
|
+
var handleAddBookmark = function handleAddBookmark() {
|
|
308
|
+
addAction(articleMeta);
|
|
327
309
|
};
|
|
310
|
+
var handleRemoveBookmark = function handleRemoveBookmark() {
|
|
311
|
+
var targetBookmarkId = bookmarkId || bookmarkIdFromState;
|
|
312
|
+
removeAction(targetBookmarkId);
|
|
313
|
+
setIsBookmarked(function () {
|
|
314
|
+
return false;
|
|
315
|
+
});
|
|
316
|
+
};
|
|
317
|
+
(0, _react.useEffect)(function () {
|
|
318
|
+
if (bookmarkId || bookmarkIdFromState) {
|
|
319
|
+
setIsBookmarked(true);
|
|
320
|
+
} else {
|
|
321
|
+
setIsBookmarked(false);
|
|
322
|
+
}
|
|
323
|
+
}, [bookmarkId, bookmarkIdFromState]);
|
|
324
|
+
(0, _react.useEffect)(function () {
|
|
325
|
+
setIconType(isBookmarked ? _enum.BookmarkType.SAVED : _enum.BookmarkType.ADD);
|
|
326
|
+
setElementId(isBookmarked ? 'remove-bookmark' : 'add-bookmark');
|
|
327
|
+
setButtonText(isBookmarked ? '已收藏' : '收藏');
|
|
328
|
+
}, [isBookmarked]);
|
|
329
|
+
var handleClick = /*#__PURE__*/function () {
|
|
330
|
+
var _ref7 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
|
|
331
|
+
var action;
|
|
332
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
333
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
334
|
+
case 0:
|
|
335
|
+
action = isBookmarked ? handleRemoveBookmark : handleAddBookmark;
|
|
336
|
+
_context2.prev = 1;
|
|
337
|
+
_context2.next = 4;
|
|
338
|
+
return action();
|
|
339
|
+
case 4:
|
|
340
|
+
_context2.next = 9;
|
|
341
|
+
break;
|
|
342
|
+
case 6:
|
|
343
|
+
_context2.prev = 6;
|
|
344
|
+
_context2.t0 = _context2["catch"](1);
|
|
345
|
+
console.error('add bookmark fail', _context2.t0);
|
|
346
|
+
case 9:
|
|
347
|
+
onClickButton(isBookmarked);
|
|
348
|
+
case 10:
|
|
349
|
+
case "end":
|
|
350
|
+
return _context2.stop();
|
|
351
|
+
}
|
|
352
|
+
}, _callee2, null, [[1, 6]]);
|
|
353
|
+
}));
|
|
354
|
+
return function handleClick() {
|
|
355
|
+
return _ref7.apply(this, arguments);
|
|
356
|
+
};
|
|
357
|
+
}();
|
|
328
358
|
var onClickButton = function onClickButton(isBookmarked) {
|
|
329
359
|
var text = isBookmarked ? '已取消收藏' : '已收藏';
|
|
330
360
|
toastr({
|
|
@@ -332,14 +362,22 @@ var BookmarkBlock = function BookmarkBlock(_ref6) {
|
|
|
332
362
|
timeout: 3000
|
|
333
363
|
});
|
|
334
364
|
};
|
|
335
|
-
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
365
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(ButtonContainer, {
|
|
366
|
+
onClick: handleClick,
|
|
367
|
+
id: elementId
|
|
368
|
+
}, /*#__PURE__*/_react["default"].createElement(_button.IconWithTextButton, {
|
|
369
|
+
text: buttonText,
|
|
370
|
+
iconComponent: /*#__PURE__*/_react["default"].createElement(_icon.Bookmark, {
|
|
371
|
+
type: iconType,
|
|
372
|
+
releaseBranch: releaseBranch
|
|
373
|
+
}),
|
|
374
|
+
theme: theme,
|
|
375
|
+
hideText: hideText
|
|
376
|
+
})));
|
|
340
377
|
};
|
|
341
378
|
BookmarkBlock.propTypes = {
|
|
342
|
-
articleMeta: _aside["default"].tools.articleMetaForBookmark
|
|
379
|
+
articleMeta: _aside["default"].tools.articleMetaForBookmark,
|
|
380
|
+
bookmarkId: _propTypes["default"].number
|
|
343
381
|
};
|
|
344
382
|
var BackToTopic = function BackToTopic(_ref8) {
|
|
345
383
|
var backToTopic = _ref8.backToTopic;
|
|
@@ -390,7 +428,8 @@ var ToolBar = function ToolBar(_ref9) {
|
|
|
390
428
|
articleMetaForBookmark = _ref9.articleMetaForBookmark,
|
|
391
429
|
onFontLevelChange = _ref9.onFontLevelChange,
|
|
392
430
|
className = _ref9.className,
|
|
393
|
-
scrollStage = _ref9.scrollStage
|
|
431
|
+
scrollStage = _ref9.scrollStage,
|
|
432
|
+
bookmarkId = _ref9.bookmarkId;
|
|
394
433
|
var themeContext = (0, _react.useContext)(_styledComponents.ThemeContext);
|
|
395
434
|
var theme = themeContext.name === _theme["default"].article.v2.photo ? 'photography' : 'normal';
|
|
396
435
|
var _getToolBarTheme = (0, _theme2.getToolBarTheme)(themeContext.name),
|
|
@@ -426,7 +465,8 @@ var ToolBar = function ToolBar(_ref9) {
|
|
|
426
465
|
}), /*#__PURE__*/_react["default"].createElement(ShareBy, {
|
|
427
466
|
fbAppID: fbAppID
|
|
428
467
|
}), /*#__PURE__*/_react["default"].createElement(BookmarkBlock, {
|
|
429
|
-
articleMeta: articleMetaForBookmark
|
|
468
|
+
articleMeta: articleMetaForBookmark,
|
|
469
|
+
bookmarkId: bookmarkId
|
|
430
470
|
}), /*#__PURE__*/_react["default"].createElement(RelatedPost, null), backToTopicJSX), /*#__PURE__*/_react["default"].createElement(SnackBarContainer, {
|
|
431
471
|
$showSnackBar: showSnackBar
|
|
432
472
|
}, /*#__PURE__*/_react["default"].createElement(_snackBar.SnackBar, {
|
|
@@ -435,6 +475,7 @@ var ToolBar = function ToolBar(_ref9) {
|
|
|
435
475
|
}))));
|
|
436
476
|
};
|
|
437
477
|
ToolBar.propTypes = _objectSpread(_objectSpread({}, _aside["default"].tools), {}, {
|
|
438
|
-
scrollStage: _propTypes["default"].number
|
|
478
|
+
scrollStage: _propTypes["default"].number,
|
|
479
|
+
bookmarkId: _propTypes["default"].number
|
|
439
480
|
});
|
|
440
481
|
var _default = exports["default"] = ToolBar;
|
|
@@ -270,7 +270,7 @@ var Img = function Img(_ref) {
|
|
|
270
270
|
window.removeEventListener('resize', handleWindowResize);
|
|
271
271
|
window.removeEventListener('keydown', handleESCClick);
|
|
272
272
|
};
|
|
273
|
-
}, []);
|
|
273
|
+
}, [handleWindowResize, handleESCClick]);
|
|
274
274
|
(0, _react.useEffect)(function () {
|
|
275
275
|
checkFullScreenImageSize();
|
|
276
276
|
}, [showFullScreenImg]);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@twreporter/react-article-components",
|
|
3
|
-
"version": "2.3.0-rc.
|
|
3
|
+
"version": "2.3.0-rc.4",
|
|
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",
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@twreporter/core": "^1.22.1",
|
|
27
|
-
"@twreporter/react-components": "^9.2.0-rc.
|
|
28
|
-
"@twreporter/redux": "^8.1.0-rc.
|
|
29
|
-
"@twreporter/universal-header": "^3.0.5-rc.
|
|
27
|
+
"@twreporter/react-components": "^9.2.0-rc.2",
|
|
28
|
+
"@twreporter/redux": "^8.1.0-rc.1",
|
|
29
|
+
"@twreporter/universal-header": "^3.0.5-rc.2",
|
|
30
30
|
"howler": "^2.2.3",
|
|
31
31
|
"lodash": "^4.17.11",
|
|
32
32
|
"memoize-one": "^5.0.5",
|
|
@@ -41,5 +41,5 @@
|
|
|
41
41
|
"files": [
|
|
42
42
|
"lib"
|
|
43
43
|
],
|
|
44
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "9813d6e3e00290afd56272efc233ff4c7a119499"
|
|
45
45
|
}
|