@atlaskit/navigation-system
Version:
The latest navigation system for Atlassian apps.
75 lines (74 loc) • 3.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useLayoutAreaSizing = useLayoutAreaSizing;
var _react = require("react");
var _layoutAreaSizingContext = require("./layout-area-sizing-context");
var _layoutAreaStateContexts = require("./layout-area-state-contexts");
function useLayoutAreaSizing(_ref) {
var area = _ref.area,
config = _ref.config;
var context = (0, _react.useContext)(_layoutAreaSizingContext.LayoutAreaSizingContext);
var requestedWidth = config.requestedWidth,
defaultWidth = config.defaultWidth,
compactDefaultWidth = config.compactDefaultWidth,
minWidth = config.minWidth,
maxWidth = config.maxWidth,
isOpen = config.isOpen,
onRequestClose = config.onRequestClose;
var registerArea = context === null || context === void 0 ? void 0 : context.registerArea;
var unregisterArea = context === null || context === void 0 ? void 0 : context.unregisterArea;
var startAreaResize = context === null || context === void 0 ? void 0 : context.startResize;
var resizeArea = context === null || context === void 0 ? void 0 : context.resize;
var completeAreaResize = context === null || context === void 0 ? void 0 : context.completeResize;
var getAreaResizeBounds = context === null || context === void 0 ? void 0 : context.getResizeBounds;
var state = (0, _react.useContext)(_layoutAreaStateContexts.layoutAreaStateContexts[area]);
// Dismissal is not a sizing input. Register a stable delegate while keeping
// the consumer's latest committed callback outside allocation state.
var onRequestCloseRef = (0, _react.useRef)(onRequestClose);
(0, _react.useEffect)(function () {
onRequestCloseRef.current = onRequestClose;
}, [onRequestClose]);
var requestClose = (0, _react.useCallback)(function () {
var _onRequestCloseRef$cu;
return (_onRequestCloseRef$cu = onRequestCloseRef.current) === null || _onRequestCloseRef$cu === void 0 ? void 0 : _onRequestCloseRef$cu.call(onRequestCloseRef);
}, []);
(0, _react.useEffect)(function () {
registerArea === null || registerArea === void 0 || registerArea(area, {
requestedWidth: requestedWidth,
defaultWidth: defaultWidth,
compactDefaultWidth: compactDefaultWidth,
minWidth: minWidth,
maxWidth: maxWidth,
isOpen: isOpen,
onRequestClose: requestClose
});
}, [area, compactDefaultWidth, defaultWidth, isOpen, maxWidth, minWidth, registerArea, requestClose, requestedWidth]);
(0, _react.useEffect)(function () {
return function () {
return unregisterArea === null || unregisterArea === void 0 ? void 0 : unregisterArea(area);
};
}, [area, unregisterArea]);
var startResize = (0, _react.useCallback)(function (mode) {
return startAreaResize === null || startAreaResize === void 0 ? void 0 : startAreaResize(area, mode);
}, [area, startAreaResize]);
var resize = (0, _react.useCallback)(function (mode, width) {
return resizeArea === null || resizeArea === void 0 ? void 0 : resizeArea(area, mode, width);
}, [area, resizeArea]);
var completeResize = (0, _react.useCallback)(function (mode, width) {
return completeAreaResize === null || completeAreaResize === void 0 ? void 0 : completeAreaResize(area, mode, width);
}, [area, completeAreaResize]);
var getResizeBounds = (0, _react.useCallback)(function () {
return getAreaResizeBounds === null || getAreaResizeBounds === void 0 ? void 0 : getAreaResizeBounds(area);
}, [area, getAreaResizeBounds]);
return {
state: state,
startResize: startResize,
resize: resize,
completeResize: completeResize,
getResizeBounds: getResizeBounds,
isManaged: context !== null,
prepareResize: context === null || context === void 0 ? void 0 : context.prepareResize
};
}