@enact/ui
Version:
A collection of simplified unstyled cross-platform UI components for Enact
66 lines (63 loc) • 2.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _handle = require("@enact/core/handle");
var _react = require("react");
var _ResizeContext = _interopRequireDefault(require("./ResizeContext"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
/**
* Object returned by `useResize`
* Object has a property named with the value of the resize property of config.
* And this property has resizehandler.
*
* @typedef {Object} useResizeInterface
* @memberof ui/Resizable
* @private
*/
/**
* A custom hook which returns handler that indicates a resize is necessary
*
* @param {Object} props Resize component props
* @param {Object} config Configuration options with resize, filter property
* @returns {useResizeInterface}
* @private
*
*/
var useResize = function useResize(props, config) {
// `resize` is the name of the event on the component to listen for size changes.
var _config$filter = config.filter,
filter = _config$filter === void 0 ? null : _config$filter,
_config$resize = config.resize,
resize = _config$resize === void 0 ? null : _config$resize;
var resizeContextValue = (0, _react.useContext)(_ResizeContext["default"]);
var mutableRef = (0, _react.useRef)({
resizeRegistry: null
});
(0, _react.useEffect)(function () {
var resizeRegistry = mutableRef.current.resizeRegistry;
if (resizeContextValue && typeof resizeContextValue === 'function') {
mutableRef.current.resizeRegistry = resizeContextValue(function () {});
}
return function () {
if (resizeRegistry) {
resizeRegistry.unregister();
}
};
}, [resizeContextValue]);
var handleResize = (0, _react.useCallback)(function (ev) {
(0, _handle.forward)(resize, ev, props);
// Notifies a container that a resize is necessary
if ((filter === null || filter(ev, props)) && mutableRef.current.resizeRegistry) {
mutableRef.current.resizeRegistry.notify({
action: 'invalidateBounds'
});
}
}, [filter, props, resize]);
return _defineProperty({}, resize, handleResize);
};
var _default = exports["default"] = useResize;