@twreporter/react-article-components 1.12.2-rc.3 → 1.13.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.
@@ -57,6 +57,8 @@ var _mobileToolBarOld = _interopRequireDefault(require("./aside/mobile-tool-bar-
57
57
 
58
58
  var _get = _interopRequireDefault(require("lodash/get"));
59
59
 
60
+ var _throttle = _interopRequireDefault(require("lodash/throttle"));
61
+
60
62
  var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18, _templateObject19, _templateObject20;
61
63
 
62
64
  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); }
@@ -89,11 +91,12 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
89
91
 
90
92
  function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
91
93
 
92
- var Tools = _featureFlag.MY_READING ? _desktopTools["default"] : _desktopToolsOld["default"];
93
- var ToolBar = _featureFlag.MY_READING ? _mobileToolBar["default"] : _mobileToolBarOld["default"];
94
94
  var _ = {
95
- get: _get["default"]
95
+ get: _get["default"],
96
+ throttle: _throttle["default"]
96
97
  };
98
+ var Tools = _featureFlag.MY_READING ? _desktopTools["default"] : _desktopToolsOld["default"];
99
+ var ToolBar = _featureFlag.MY_READING ? _mobileToolBar["default"] : _mobileToolBarOld["default"];
97
100
  var shiftLeftCss = /*#__PURE__*/(0, _styledComponents.css)(["position:relative;width:calc(100% + 20px);left:-10px;"]);
98
101
 
99
102
  var BorderBox = /*#__PURE__*/_styledComponents["default"].div.withConfig({
@@ -245,16 +248,12 @@ var Article = /*#__PURE__*/function (_PureComponent) {
245
248
 
246
249
  var _super = _createSuper(Article);
247
250
 
248
- function Article() {
251
+ function Article(props) {
249
252
  var _this;
250
253
 
251
254
  _classCallCheck(this, Article);
252
255
 
253
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
254
- args[_key] = arguments[_key];
255
- }
256
-
257
- _this = _super.call.apply(_super, [this].concat(args));
256
+ _this = _super.call(this, props);
258
257
 
259
258
  _defineProperty(_assertThisInitialized(_this), "changeFontLevel", function () {
260
259
  var _this$props = _this.props,
@@ -288,6 +287,12 @@ var Article = /*#__PURE__*/function (_PureComponent) {
288
287
  }
289
288
  });
290
289
 
290
+ _this.state = {
291
+ scrollStage: 1
292
+ };
293
+ _this.lastY = 0;
294
+ _this.currentY = 0;
295
+ _this.handleScroll = _.throttle(_this._handleScroll.bind(_assertThisInitialized(_this)), 50);
291
296
  return _this;
292
297
  }
293
298
 
@@ -312,6 +317,46 @@ var Article = /*#__PURE__*/function (_PureComponent) {
312
317
  }
313
318
  }
314
319
  }
320
+ }, {
321
+ key: "_handleScroll",
322
+ value: function _handleScroll() {
323
+ var scrollThreshold = 16;
324
+ this.lastY = window.pageYOffset;
325
+ var scrollDistance = Math.abs(this.currentY - this.lastY);
326
+
327
+ if (scrollDistance < scrollThreshold) {
328
+ return;
329
+ }
330
+
331
+ var scrollDirection = this.lastY > this.currentY ? 'down' : 'up';
332
+ this.currentY = this.lastY;
333
+
334
+ if (scrollDirection === 'up') {
335
+ this.setState(function (prevState) {
336
+ return {
337
+ scrollStage: prevState.scrollStage - 1 < 1 ? 1 : prevState.scrollStage - 1
338
+ };
339
+ });
340
+ } else {
341
+ this.setState(function (prevState) {
342
+ return {
343
+ scrollStage: prevState.scrollStage + 1 > 3 ? 3 : prevState.scrollStage + 1
344
+ };
345
+ });
346
+ }
347
+ }
348
+ }, {
349
+ key: "componentDidMount",
350
+ value: function componentDidMount() {
351
+ window.addEventListener('scroll', this.handleScroll, {
352
+ passive: true
353
+ });
354
+ }
355
+ }, {
356
+ key: "componentWillUnmount",
357
+ value: function componentWillUnmount() {
358
+ window.removeEventListener('scroll', this.handleScroll);
359
+ }
315
360
  }, {
316
361
  key: "render",
317
362
  value: function render() {
@@ -372,7 +417,8 @@ var Article = /*#__PURE__*/function (_PureComponent) {
372
417
  className: 'hidden-print',
373
418
  backToTopic: backToTopic,
374
419
  articleMetaForBookmark: articleMetaForBookmark,
375
- onFontLevelChange: this.changeFontLevel
420
+ onFontLevelChange: this.changeFontLevel,
421
+ scrollStage: this.state.scrollStage
376
422
  }), /*#__PURE__*/_react["default"].createElement(DesktopAsideBlock, null, /*#__PURE__*/_react["default"].createElement(_desktopAside["default"], {
377
423
  backToTopic: backToTopic,
378
424
  categorySet: post.category_set,
@@ -389,7 +435,8 @@ var Article = /*#__PURE__*/function (_PureComponent) {
389
435
  key: _.get(post, 'slug', 'article-page-body-key'),
390
436
  brief: _.get(post, 'brief.api_data'),
391
437
  content: _.get(post, 'content.api_data'),
392
- onToggleTabExpanded: onToggleTabExpanded
438
+ onToggleTabExpanded: onToggleTabExpanded,
439
+ scrollStage: this.state.scrollStage
393
440
  })), metadataAndToolsJSX), /*#__PURE__*/_react["default"].createElement(_donationBox["default"], null), /*#__PURE__*/_react["default"].createElement(_license["default"], {
394
441
  license: post.copyright,
395
442
  publishedDate: post.published_date,
@@ -35,14 +35,16 @@ var _snackBar = require("@twreporter/react-components/lib/snack-bar");
35
35
 
36
36
  var _zIndex = _interopRequireDefault(require("@twreporter/core/lib/constants/z-index"));
37
37
 
38
- var _isNil = _interopRequireDefault(require("lodash/isNil"));
39
-
40
38
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
41
39
 
42
40
  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); }
43
41
 
44
42
  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; }
45
43
 
44
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
45
+
46
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
47
+
46
48
  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); }
47
49
 
48
50
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@@ -63,10 +65,7 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try
63
65
 
64
66
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
65
67
 
66
- var _ = {
67
- isNil: _isNil["default"]
68
- }; // global var
69
-
68
+ // global var
70
69
  var ToolBarContext = /*#__PURE__*/(0, _react.createContext)();
71
70
  var defaultFbAppID = '962589903815787';
72
71
 
@@ -96,23 +95,30 @@ var SnackBarContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig
96
95
  return props.showSnackBar ? 1 : 0;
97
96
  });
98
97
 
99
- var ToolBarContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
100
- displayName: "mobile-tool-bar-old__ToolBarContainer",
98
+ var ToolBarWrapper = /*#__PURE__*/_styledComponents["default"].div.withConfig({
99
+ displayName: "mobile-tool-bar-old__ToolBarWrapper",
101
100
  componentId: "sc-12vlkqc-4"
102
- })(["display:flex;align-items:center;width:fit-content;background-color:", ";padding:0 16px;border-radius:60px;position:fixed;left:50%;transform:translate(-50%,0);bottom:calc(env(safe-area-inset-bottom,0) + 8px);z-index:", ";height:", ";transition:height 100ms;box-shadow:", ";", "{background-color:", ";box-shadow:", ";}", "{bottom:", ";}"], function (props) {
101
+ })(["display:flex;width:100%;justify-content:center;padding:8px;position:fixed;left:0px;bottom:env(safe-area-inset-bottom,0);height:", ";transform:", ";transition:height 200ms,transform 200ms ease-in-out;background-color:", ";border-top:1px solid ", ";z-index:", ";", "{background-color:", ";box-shadow:", ";}", "{bottom:", ";}"], function (props) {
102
+ return props.hideText ? '40px' : '55px';
103
+ }, function (props) {
104
+ return props.isHidden ? 'translateY(100%)' : 'tanslateY(0%)';
105
+ }, function (props) {
103
106
  return props.bgColor;
104
- }, _zIndex["default"].mobileToolBar, function (props) {
105
- return props.hideText ? '38px' : '56px';
106
107
  }, function (props) {
107
- return props.shadow;
108
- }, ShareContainer, function (props) {
108
+ return props.borderColor;
109
+ }, _zIndex["default"].mobileToolBar, ShareContainer, function (props) {
109
110
  return props.bgColor;
110
111
  }, function (props) {
111
112
  return props.shadow;
112
113
  }, SnackBarContainer, function (props) {
113
- return props.hideText ? '46px' : '64px';
114
+ return props.hideText ? '48px' : '62px';
114
115
  });
115
116
 
117
+ var ToolBarContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
118
+ displayName: "mobile-tool-bar-old__ToolBarContainer",
119
+ componentId: "sc-12vlkqc-5"
120
+ })(["display:flex;width:100%;max-width:560px;justify-content:space-evenly;align-items:center;"]);
121
+
116
122
  var FbShare = function FbShare(_ref) {
117
123
  var appID = _ref.appID;
118
124
  var themeContext = (0, _react.useContext)(_styledComponents.ThemeContext);
@@ -468,57 +474,14 @@ var ToolBar = function ToolBar(_ref9) {
468
474
  fbAppID = _ref9$fbAppID === void 0 ? defaultFbAppID : _ref9$fbAppID,
469
475
  articleMetaForBookmark = _ref9.articleMetaForBookmark,
470
476
  onFontLevelChange = _ref9.onFontLevelChange,
471
- className = _ref9.className;
472
-
473
- var _useState3 = (0, _react.useState)('init'),
474
- _useState4 = _slicedToArray(_useState3, 2),
475
- scrollDirection = _useState4[0],
476
- setScrollDirection = _useState4[1];
477
-
478
- (0, _react.useEffect)(function () {
479
- var threshold = 8;
480
- var lastScrollY = window.pageYOffset;
481
- var ticking = false;
482
-
483
- var updateScrollDirection = function updateScrollDirection() {
484
- var scrollY = window.pageYOffset;
485
-
486
- if (_.isNil(lastScrollY)) {
487
- ticking = false;
488
- return;
489
- }
490
-
491
- if (Math.abs(scrollY - lastScrollY) < threshold) {
492
- ticking = false;
493
- return;
494
- }
495
-
496
- var scrollDirection = scrollY > lastScrollY ? 'down' : 'up';
497
- setScrollDirection(scrollDirection);
498
- lastScrollY = scrollY > 0 ? scrollY : 0;
499
- ticking = false;
500
- };
501
-
502
- var onScroll = function onScroll() {
503
- if (!ticking) {
504
- window.requestAnimationFrame(updateScrollDirection);
505
- ticking = true;
506
- }
507
- };
508
-
509
- window.addEventListener('scroll', onScroll);
510
- return function () {
511
- window.removeEventListener('scroll', onScroll);
512
- lastScrollY = null;
513
- ticking = null;
514
- };
515
- }, [scrollDirection]);
477
+ className = _ref9.className,
478
+ scrollStage = _ref9.scrollStage;
516
479
  var themeContext = (0, _react.useContext)(_styledComponents.ThemeContext);
517
480
  var theme = themeContext.name === _theme["default"].article.v2.photo ? 'photography' : 'normal';
518
481
 
519
482
  var _getToolBarTheme = (0, _theme2.getToolBarTheme)(themeContext.name),
520
483
  bgColor = _getToolBarTheme.bgColor,
521
- shadow = _getToolBarTheme.shadow;
484
+ borderColor = _getToolBarTheme.borderColor;
522
485
 
523
486
  var _useSnackBar = (0, _snackBar.useSnackBar)(),
524
487
  showSnackBar = _useSnackBar.showSnackBar,
@@ -528,26 +491,28 @@ var ToolBar = function ToolBar(_ref9) {
528
491
  var backToTopicJSX = backToTopic ? /*#__PURE__*/_react["default"].createElement(BackToTopic, {
529
492
  backToTopic: backToTopic
530
493
  }) : null;
531
- var hideText = scrollDirection === 'down';
494
+ var hideText = scrollStage >= 2;
495
+ var hideToolBar = scrollStage >= 3;
532
496
  var contextValue = {
533
497
  hideText: hideText,
534
498
  toastr: toastr
535
499
  };
536
500
  return /*#__PURE__*/_react["default"].createElement(ToolBarContext.Provider, {
537
501
  value: contextValue
538
- }, /*#__PURE__*/_react["default"].createElement(ToolBarContainer, {
502
+ }, /*#__PURE__*/_react["default"].createElement(ToolBarWrapper, {
539
503
  bgColor: bgColor,
540
- shadow: shadow,
504
+ borderColor: borderColor,
541
505
  hideText: hideText,
542
506
  className: className,
507
+ isHidden: hideToolBar,
543
508
  id: "mobile-tool-bar"
544
- }, /*#__PURE__*/_react["default"].createElement(FontLevel, {
509
+ }, /*#__PURE__*/_react["default"].createElement(ToolBarContainer, null, /*#__PURE__*/_react["default"].createElement(FontLevel, {
545
510
  changeFontLevel: onFontLevelChange
546
511
  }), /*#__PURE__*/_react["default"].createElement(ShareBy, {
547
512
  fbAppID: fbAppID
548
513
  }), /*#__PURE__*/_react["default"].createElement(BookmarkBlock, {
549
514
  articleMeta: articleMetaForBookmark
550
- }), /*#__PURE__*/_react["default"].createElement(RelatedPost, null), backToTopicJSX, /*#__PURE__*/_react["default"].createElement(SnackBarContainer, {
515
+ }), /*#__PURE__*/_react["default"].createElement(RelatedPost, null), backToTopicJSX), /*#__PURE__*/_react["default"].createElement(SnackBarContainer, {
551
516
  showSnackBar: showSnackBar
552
517
  }, /*#__PURE__*/_react["default"].createElement(_snackBar.SnackBar, {
553
518
  text: snackBarText,
@@ -555,6 +520,8 @@ var ToolBar = function ToolBar(_ref9) {
555
520
  }))));
556
521
  };
557
522
 
558
- ToolBar.propTypes = _aside["default"].tools;
523
+ ToolBar.propTypes = _objectSpread(_objectSpread({}, _aside["default"].tools), {}, {
524
+ scrollStage: _propTypes["default"].number
525
+ });
559
526
  var _default = ToolBar;
560
527
  exports["default"] = _default;
@@ -35,14 +35,16 @@ var _snackBar = require("@twreporter/react-components/lib/snack-bar");
35
35
 
36
36
  var _zIndex = _interopRequireDefault(require("@twreporter/core/lib/constants/z-index"));
37
37
 
38
- var _isNil = _interopRequireDefault(require("lodash/isNil"));
39
-
40
38
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
41
39
 
42
40
  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); }
43
41
 
44
42
  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; }
45
43
 
44
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
45
+
46
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
47
+
46
48
  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); }
47
49
 
48
50
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@@ -63,10 +65,7 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try
63
65
 
64
66
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
65
67
 
66
- var _ = {
67
- isNil: _isNil["default"]
68
- }; // global var
69
-
68
+ // global var
70
69
  var ToolBarContext = /*#__PURE__*/(0, _react.createContext)();
71
70
  var defaultFbAppID = '962589903815787';
72
71
 
@@ -96,23 +95,30 @@ var SnackBarContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig
96
95
  return props.showSnackBar ? 1 : 0;
97
96
  });
98
97
 
99
- var ToolBarContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
100
- displayName: "mobile-tool-bar__ToolBarContainer",
98
+ var ToolBarWrapper = /*#__PURE__*/_styledComponents["default"].div.withConfig({
99
+ displayName: "mobile-tool-bar__ToolBarWrapper",
101
100
  componentId: "do65sv-4"
102
- })(["display:flex;align-items:center;width:fit-content;background-color:", ";padding:0 16px;border-radius:60px;position:fixed;left:50%;transform:translate(-50%,0);bottom:calc(env(safe-area-inset-bottom,0) + 8px);z-index:", ";height:", ";transition:height 100ms;box-shadow:", ";", "{background-color:", ";box-shadow:", ";}", "{bottom:", ";}"], function (props) {
101
+ })(["display:flex;width:100%;justify-content:center;padding:8px;position:fixed;left:0px;bottom:env(safe-area-inset-bottom,0);height:", ";transform:", ";transition:height 200ms,transform 200ms ease-in-out;background-color:", ";border-top:1px solid ", ";z-index:", ";", "{background-color:", ";box-shadow:", ";}", "{bottom:", ";}"], function (props) {
102
+ return props.hideText ? '40px' : '55px';
103
+ }, function (props) {
104
+ return props.isHidden ? 'translateY(100%)' : 'tanslateY(0%)';
105
+ }, function (props) {
103
106
  return props.bgColor;
104
- }, _zIndex["default"].mobileToolBar, function (props) {
105
- return props.hideText ? '38px' : '56px';
106
107
  }, function (props) {
107
- return props.shadow;
108
- }, ShareContainer, function (props) {
108
+ return props.borderColor;
109
+ }, _zIndex["default"].mobileToolBar, ShareContainer, function (props) {
109
110
  return props.bgColor;
110
111
  }, function (props) {
111
112
  return props.shadow;
112
113
  }, SnackBarContainer, function (props) {
113
- return props.hideText ? '46px' : '64px';
114
+ return props.hideText ? '48px' : '62px';
114
115
  });
115
116
 
117
+ var ToolBarContainer = /*#__PURE__*/_styledComponents["default"].div.withConfig({
118
+ displayName: "mobile-tool-bar__ToolBarContainer",
119
+ componentId: "do65sv-5"
120
+ })(["display:flex;width:100%;max-width:560px;justify-content:space-evenly;align-items:center;"]);
121
+
116
122
  var FbShare = function FbShare(_ref) {
117
123
  var appID = _ref.appID;
118
124
  var themeContext = (0, _react.useContext)(_styledComponents.ThemeContext);
@@ -468,57 +474,14 @@ var ToolBar = function ToolBar(_ref9) {
468
474
  fbAppID = _ref9$fbAppID === void 0 ? defaultFbAppID : _ref9$fbAppID,
469
475
  articleMetaForBookmark = _ref9.articleMetaForBookmark,
470
476
  onFontLevelChange = _ref9.onFontLevelChange,
471
- className = _ref9.className;
472
-
473
- var _useState3 = (0, _react.useState)('init'),
474
- _useState4 = _slicedToArray(_useState3, 2),
475
- scrollDirection = _useState4[0],
476
- setScrollDirection = _useState4[1];
477
-
478
- (0, _react.useEffect)(function () {
479
- var threshold = 8;
480
- var lastScrollY = window.pageYOffset;
481
- var ticking = false;
482
-
483
- var updateScrollDirection = function updateScrollDirection() {
484
- var scrollY = window.pageYOffset;
485
-
486
- if (_.isNil(lastScrollY)) {
487
- ticking = false;
488
- return;
489
- }
490
-
491
- if (Math.abs(scrollY - lastScrollY) < threshold) {
492
- ticking = false;
493
- return;
494
- }
495
-
496
- var scrollDirection = scrollY > lastScrollY ? 'down' : 'up';
497
- setScrollDirection(scrollDirection);
498
- lastScrollY = scrollY > 0 ? scrollY : 0;
499
- ticking = false;
500
- };
501
-
502
- var onScroll = function onScroll() {
503
- if (!ticking) {
504
- window.requestAnimationFrame(updateScrollDirection);
505
- ticking = true;
506
- }
507
- };
508
-
509
- window.addEventListener('scroll', onScroll);
510
- return function () {
511
- window.removeEventListener('scroll', onScroll);
512
- lastScrollY = null;
513
- ticking = null;
514
- };
515
- }, [scrollDirection]);
477
+ className = _ref9.className,
478
+ scrollStage = _ref9.scrollStage;
516
479
  var themeContext = (0, _react.useContext)(_styledComponents.ThemeContext);
517
480
  var theme = themeContext.name === _theme["default"].article.v2.photo ? 'photography' : 'normal';
518
481
 
519
482
  var _getToolBarTheme = (0, _theme2.getToolBarTheme)(themeContext.name),
520
483
  bgColor = _getToolBarTheme.bgColor,
521
- shadow = _getToolBarTheme.shadow;
484
+ borderColor = _getToolBarTheme.borderColor;
522
485
 
523
486
  var _useSnackBar = (0, _snackBar.useSnackBar)(),
524
487
  showSnackBar = _useSnackBar.showSnackBar,
@@ -528,26 +491,28 @@ var ToolBar = function ToolBar(_ref9) {
528
491
  var backToTopicJSX = backToTopic ? /*#__PURE__*/_react["default"].createElement(BackToTopic, {
529
492
  backToTopic: backToTopic
530
493
  }) : null;
531
- var hideText = scrollDirection === 'down';
494
+ var hideText = scrollStage >= 2;
495
+ var hideToolBar = scrollStage >= 3;
532
496
  var contextValue = {
533
497
  hideText: hideText,
534
498
  toastr: toastr
535
499
  };
536
500
  return /*#__PURE__*/_react["default"].createElement(ToolBarContext.Provider, {
537
501
  value: contextValue
538
- }, /*#__PURE__*/_react["default"].createElement(ToolBarContainer, {
502
+ }, /*#__PURE__*/_react["default"].createElement(ToolBarWrapper, {
539
503
  bgColor: bgColor,
540
- shadow: shadow,
504
+ borderColor: borderColor,
541
505
  hideText: hideText,
542
506
  className: className,
507
+ isHidden: hideToolBar,
543
508
  id: "mobile-tool-bar"
544
- }, /*#__PURE__*/_react["default"].createElement(FontLevel, {
509
+ }, /*#__PURE__*/_react["default"].createElement(ToolBarContainer, null, /*#__PURE__*/_react["default"].createElement(FontLevel, {
545
510
  changeFontLevel: onFontLevelChange
546
511
  }), /*#__PURE__*/_react["default"].createElement(ShareBy, {
547
512
  fbAppID: fbAppID
548
513
  }), /*#__PURE__*/_react["default"].createElement(BookmarkBlock, {
549
514
  articleMeta: articleMetaForBookmark
550
- }), /*#__PURE__*/_react["default"].createElement(RelatedPost, null), backToTopicJSX, /*#__PURE__*/_react["default"].createElement(SnackBarContainer, {
515
+ }), /*#__PURE__*/_react["default"].createElement(RelatedPost, null), backToTopicJSX), /*#__PURE__*/_react["default"].createElement(SnackBarContainer, {
551
516
  showSnackBar: showSnackBar
552
517
  }, /*#__PURE__*/_react["default"].createElement(_snackBar.SnackBar, {
553
518
  text: snackBarText,
@@ -555,6 +520,8 @@ var ToolBar = function ToolBar(_ref9) {
555
520
  }))));
556
521
  };
557
522
 
558
- ToolBar.propTypes = _aside["default"].tools;
523
+ ToolBar.propTypes = _objectSpread(_objectSpread({}, _aside["default"].tools), {}, {
524
+ scrollStage: _propTypes["default"].number
525
+ });
559
526
  var _default = ToolBar;
560
527
  exports["default"] = _default;
@@ -18,14 +18,14 @@ var getToolBarTheme = function getToolBarTheme(theme) {
18
18
  case _theme["default"].article.v2.photo:
19
19
  return {
20
20
  bgColor: _color.colorPhoto.dark,
21
- shadow: '0px 0px 8px rgba(0, 0, 0, 0.5)'
21
+ borderColor: _color.colorPhoto.heavy
22
22
  };
23
23
 
24
24
  case _theme["default"].article.v2["default"]:
25
25
  default:
26
26
  return {
27
- bgColor: _color.colorGrayscale.white,
28
- shadow: '0px 0px 8px rgba(0, 0, 0, 0.1)'
27
+ bgColor: _color.colorGrayscale.gray100,
28
+ borderColor: _color.colorGrayscale.gray300
29
29
  };
30
30
  }
31
31
  };
@@ -469,7 +469,8 @@ var Body = /*#__PURE__*/function (_Component) {
469
469
  var _this$props = this.props,
470
470
  brief = _this$props.brief,
471
471
  content = _this$props.content,
472
- onToggleTabExpanded = _this$props.onToggleTabExpanded;
472
+ onToggleTabExpanded = _this$props.onToggleTabExpanded,
473
+ scrollStage = _this$props.scrollStage;
473
474
  var enableTOC = false;
474
475
  var contentJsx = Array.isArray(content) ? _.map(content, function (data, index) {
475
476
  var elementJSX = _this2._buildContentElement(data, index);
@@ -492,7 +493,8 @@ var Body = /*#__PURE__*/function (_Component) {
492
493
  }), contentJsx, /*#__PURE__*/_react["default"].createElement(ClearFloat, null), enableTOC ? /*#__PURE__*/_react["default"].createElement(_tableOfContents["default"].React.TableOfContents, {
493
494
  manager: this.tocManager,
494
495
  onStartScrollingToAnchor: this._onStartScrollingToAnchor,
495
- onToggleTabExpanded: onToggleTabExpanded
496
+ onToggleTabExpanded: onToggleTabExpanded,
497
+ scrollStage: scrollStage
496
498
  }) : null);
497
499
  }
498
500
  }]);
@@ -505,11 +507,13 @@ exports["default"] = Body;
505
507
  _defineProperty(Body, "propTypes", {
506
508
  brief: _propTypes["default"].arrayOf(_body["default"].elementData),
507
509
  content: _propTypes["default"].arrayOf(_body["default"].elementData),
508
- onToggleTabExpanded: _propTypes["default"].func
510
+ onToggleTabExpanded: _propTypes["default"].func,
511
+ scrollStage: _propTypes["default"].number
509
512
  });
510
513
 
511
514
  _defineProperty(Body, "defaultProps", {
512
515
  brief: [],
513
516
  content: [],
514
- onToggleTabExpanded: function onToggleTabExpanded() {}
517
+ onToggleTabExpanded: function onToggleTabExpanded() {},
518
+ scollStage: 1
515
519
  });