@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
77 lines (76 loc) • 2.59 kB
JavaScript
;
"use client";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = ModalHeaderBar;
var _react = require("react");
var _clsx = _interopRequireDefault(require("clsx"));
var _Section = _interopRequireDefault(require("../../section/Section.js"));
var _ModalContext = _interopRequireDefault(require("../ModalContext.js"));
var _CloseButton = _interopRequireDefault(require("./CloseButton.js"));
var _jsxRuntime = require("react/jsx-runtime");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function ModalHeaderBar({
className = null,
children = null,
ref: _ref,
shadowClass = null,
...props
}) {
const context = (0, _react.useContext)(_ModalContext.default);
const sectionRef = (0, _react.useRef)(null);
const [showShadow, setShowShadow] = (0, _react.useState)(false);
(0, _react.useEffect)(() => {
if (typeof window === 'undefined' || typeof IntersectionObserver === 'undefined' || !sectionRef.current) {
return undefined;
}
const element = sectionRef.current;
const marginTop = -element.clientHeight;
let scrollRoot = null;
let parent = element.parentElement;
while (parent) {
var _parent$classList;
if ((_parent$classList = parent.classList) !== null && _parent$classList !== void 0 && _parent$classList.contains('dnb-scroll-view')) {
scrollRoot = parent;
break;
}
parent = parent.parentElement;
}
const observer = new IntersectionObserver(entries => {
const [entry] = entries;
setShowShadow(!entry.isIntersecting);
}, {
root: scrollRoot,
rootMargin: `${marginTop}px 0px 0px 0px`,
threshold: 0.001
});
observer.observe(element);
return () => {
observer.disconnect();
};
}, [children]);
const {
hideCloseButton = false,
closeButtonAttributes,
onCloseClickHandler,
closeTitle
} = context;
return (0, _jsxRuntime.jsxs)(_Section.default, {
className: (0, _clsx.default)('dnb-modal__header__bar', className, showShadow && shadowClass),
ref: sectionRef,
...props,
children: [(0, _jsxRuntime.jsx)("div", {
className: "dnb-modal__header__bar__inner",
children: children
}), !hideCloseButton && (0, _jsxRuntime.jsx)("div", {
className: "dnb-modal__header__bar__close",
children: (0, _jsxRuntime.jsx)(_CloseButton.default, {
onClick: onCloseClickHandler,
closeTitle: closeTitle,
...closeButtonAttributes
})
})]
});
}
//# sourceMappingURL=ModalHeaderBar.js.map