react-hooks-global-scrollspy
Version:
React Hook for managing navigation by scroll position
19 lines (18 loc) • 1.01 kB
JavaScript
import { useCallback, useContext } from "react";
import { GlobalScrollSpyContext } from "./GlobalScrollSpyContext";
/**
* @returns [ isActive, actions ] - Two return values are returned as an array
* @returns isActive - Whether the DOM element specified by key is active
* @returns actions - Actions are used to control registered DOM elements specified by key
*/
export var useGlobalScrollSpyOf = function (key) {
var _a = useContext(GlobalScrollSpyContext), activeElement = _a.activeElement, actions = _a.actions;
var isActive = (activeElement === null || activeElement === void 0 ? void 0 : activeElement.key) === key;
var registerElement = useCallback(function (element) {
actions.registerElement({ key: key, element: element });
}, [actions, key]);
var unregisterElement = useCallback(function () {
actions.unregisterElement({ key: key });
}, [actions, key]);
return [isActive, { registerElement: registerElement, unregisterElement: unregisterElement }];
};