@uiw/react-only-when
Version:
A declarative component for conditional rendering.
54 lines (53 loc) • 2.14 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _exportNames = {};
exports.default = OnlyWhen;
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _react = _interopRequireDefault(require("react"));
var _If = require("./If");
Object.keys(_If).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
if (key in exports && exports[key] === _If[key]) return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function get() {
return _If[key];
}
});
});
var _jsxRuntime = require("react/jsx-runtime");
var _excluded = ["style"];
function OnlyWhen(props) {
var children = props.children,
when = props.when,
hiddenMode = props.hiddenMode,
className = props.className;
var singleChild = _react.default.Children.only(children);
var _singleChild$props = singleChild.props,
style = _singleChild$props.style,
restOfChildProps = (0, _objectWithoutProperties2.default)(_singleChild$props, _excluded);
var extendedProps = (0, _objectSpread2.default)({}, restOfChildProps);
var keepNode = hiddenMode && hiddenMode !== 'null';
if (keepNode) {
if (hiddenMode === 'css') {
extendedProps.className = "".concat(extendedProps.className || '', " ").concat(className || '').trim();
} else {
extendedProps.style = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, style), hiddenMode === 'display' && {
display: 'none'
}), hiddenMode === 'visibility' && {
visibility: 'hidden'
});
}
}
var cloned = /*#__PURE__*/_react.default.cloneElement(singleChild, extendedProps);
var toHide = /*#__PURE__*/(0, _jsxRuntime.jsx)(_If.If, {
condition: keepNode,
children: cloned
});
return when ? singleChild : toHide;
}