UNPKG

organism-react-scroll-nav

Version:
96 lines (92 loc) 3.7 kB
"use strict"; var _interopRequireDefault = require("reshow-runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports["default"] = void 0; var _objectSpread2 = _interopRequireDefault(require("reshow-runtime/helpers/objectSpread2")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("reshow-runtime/helpers/objectWithoutPropertiesLoose")); var _react = _interopRequireDefault(require("react")); var _reshowReturn = require("reshow-return"); var _reactAtomicMolecule = require("react-atomic-molecule"); var _reshowConstant = require("reshow-constant"); var _scrollStore = _interopRequireDefault(require("../../stores/scrollStore.js")); var _fastScrollStore = _interopRequireDefault(require("../../stores/fastScrollStore.js")); var _excluded = ["scrollMargin", "noDelay", "targetId", "container", "children"]; //@ts-check var isValidElement = _react["default"].isValidElement, useRef = _react["default"].useRef; /** * @typedef {any} ScrollReceiverProps */ /** * @param {ScrollReceiverProps} props */ var useScrollReceiver = function useScrollReceiver(props) { var _props$scrollMargin = props.scrollMargin, scrollMargin = _props$scrollMargin === void 0 ? _reshowConstant.DEFAULT : _props$scrollMargin, _props$noDelay = props.noDelay, noDelay = _props$noDelay === void 0 ? false : _props$noDelay, targetId = props.targetId, container = props.container, children = props.children, restProps = (0, _objectWithoutPropertiesLoose2["default"])(props, _excluded); /** @type {React.RefObject<boolean>} */ var lastIsShown = useRef(false); var store = noDelay ? _fastScrollStore["default"] : _scrollStore["default"]; var _useReturn = (0, _reshowReturn.useReturn)(["scroll"], store), _useReturn$scroll = _useReturn.scroll, scrollInfo = _useReturn$scroll === void 0 ? {} : _useReturn$scroll; var activeId = store.getState().get("m" + scrollMargin); var scrollTop = scrollInfo.top; var pos = store.scroller.getOffset(targetId) || {}; var isShown = lastIsShown.current || false; var active = _reshowConstant.UNDEFINED !== typeof targetId && targetId === activeId; var targetInfo = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, pos), {}, { active: active, scrollTop: scrollTop, scrollInfo: scrollInfo, scrollMargin: scrollMargin, isShown: isShown, targetId: targetId }); if (pos.isOnScreen) { targetInfo.isShown = true; lastIsShown.current = true; } if (!isNaN(scrollMargin)) { store.scroller.addMargin(scrollMargin); } return { targetInfo: targetInfo, container: container, children: children, restProps: restProps }; }; /** * @param {ScrollReceiverProps} props */ var ScrollReceiver = function ScrollReceiver(props) { var _useScrollReceiver = useScrollReceiver(props), targetInfo = _useScrollReceiver.targetInfo, container = _useScrollReceiver.container, children = _useScrollReceiver.children, restProps = _useScrollReceiver.restProps; var nextContainer = container; var nextChildren = children; if (!nextContainer) { nextContainer = children; nextChildren = null; } if (!nextChildren && isValidElement(nextContainer)) { nextChildren = nextContainer.props.children; } return (0, _reactAtomicMolecule.build)(nextContainer)((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, restProps), {}, { targetInfo: targetInfo }), /** * sould not use build here, let nextContainer handle children by itself. */ nextChildren); }; ScrollReceiver.displayName = "ScrollReceiver"; var _default = exports["default"] = ScrollReceiver; module.exports = exports.default;