UNPKG

@atlaskit/renderer

Version:
53 lines 1.97 kB
import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; import React, { createContext, useState, useContext, useMemo, useRef, useCallback } from 'react'; var AnnotationHoverStateContext = /*#__PURE__*/createContext({ isWithinRange: false }); var AnnotationHoverDispatchContext = /*#__PURE__*/createContext({ cancelTimeout: function cancelTimeout() {}, initiateTimeout: function initiateTimeout() {}, setIsWithinRange: function setIsWithinRange() {} }); export var AnnotationHoverContext = function AnnotationHoverContext(_ref) { var children = _ref.children; var _useState = useState(false), _useState2 = _slicedToArray(_useState, 2), isWithinRange = _useState2[0], setIsWithinRange = _useState2[1]; var timeoutHandler = useRef(); var cancelTimeout = useCallback(function () { if (timeoutHandler) { clearTimeout(timeoutHandler.current); } }, [timeoutHandler]); var initiateTimeout = useCallback(function () { if (isWithinRange) { timeoutHandler.current = setTimeout(function () { setIsWithinRange(false); }, 500); } }, [isWithinRange]); var stateData = useMemo(function () { return { isWithinRange: isWithinRange }; }, [isWithinRange]); var dispatchData = useMemo(function () { return { cancelTimeout: cancelTimeout, initiateTimeout: initiateTimeout, setIsWithinRange: setIsWithinRange }; }, [cancelTimeout, initiateTimeout, setIsWithinRange]); return /*#__PURE__*/React.createElement(AnnotationHoverStateContext.Provider, { value: stateData }, /*#__PURE__*/React.createElement(AnnotationHoverDispatchContext.Provider, { value: dispatchData }, children)); }; export var useAnnotationHoverContext = function useAnnotationHoverContext() { return useContext(AnnotationHoverStateContext); }; export var useAnnotationHoverDispatch = function useAnnotationHoverDispatch() { return useContext(AnnotationHoverDispatchContext); };