@atlaskit/renderer
Version:
Renderer component
53 lines • 1.97 kB
JavaScript
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);
};