@coreui/react-pro
Version:
UI Components Library for React.js
101 lines (97 loc) • 3.88 kB
JavaScript
var React = require('react');
var PropTypes = require('prop-types');
var index = require('../../node_modules/classnames/index.js');
var useForkedRef = require('../../hooks/useForkedRef.js');
var usePopper = require('../../hooks/usePopper.js');
var isRTL = require('../../utils/isRTL.js');
var CPicker = React.forwardRef(function (_a, ref) {
var children = _a.children, className = _a.className, _b = _a.container, container = _b === void 0 ? 'dropdown' : _b, disabled = _a.disabled, dropdownClassNames = _a.dropdownClassNames, footer = _a.footer, footerContent = _a.footerContent, onHide = _a.onHide, onShow = _a.onShow, toggler = _a.toggler, visible = _a.visible;
var pickerRef = React.useRef(null);
var pickerForkedRef = useForkedRef.useForkedRef(ref, pickerRef);
var dropdownRef = React.useRef(null);
var togglerRef = React.useRef(null);
var _c = usePopper.usePopper(), initPopper = _c.initPopper, destroyPopper = _c.destroyPopper;
var _d = React.useState(visible), _visible = _d[0], setVisible = _d[1];
var popperConfig = {
placement: (isRTL.default(pickerRef.current) ? 'bottom-end' : 'bottom-start'),
modifiers: [
{
name: 'preventOverflow',
options: {
boundary: 'clippingParents',
},
},
{
name: 'offset',
options: {
offset: [0, 2],
},
},
],
};
React.useEffect(function () {
setVisible(visible);
}, [visible]);
React.useEffect(function () {
if (container !== 'inline' && _visible) {
onShow && onShow();
window.addEventListener('mouseup', handleMouseUp);
window.addEventListener('keyup', handleKeyUp);
togglerRef.current &&
dropdownRef.current &&
initPopper(togglerRef.current, dropdownRef.current, popperConfig);
}
return function () {
onHide && onHide();
window.removeEventListener('mouseup', handleMouseUp);
window.removeEventListener('keyup', handleKeyUp);
destroyPopper();
};
}, [_visible]);
var handleKeyUp = function (event) {
if (event.key === 'Escape') {
setVisible(false);
}
};
var handleMouseUp = function (event) {
if (pickerRef.current && pickerRef.current.contains(event.target)) {
return;
}
setVisible(false);
};
switch (container) {
case 'inline': {
return (React.createElement("div", { className: index.default('picker', className), ref: pickerForkedRef }, children));
}
default: {
return (React.createElement("div", { className: index.default(className, {
show: _visible,
}), onClick: function () { return !disabled && setVisible(true); }, ref: pickerForkedRef },
toggler &&
React.isValidElement(toggler) &&
React.cloneElement(toggler, {
ref: togglerRef,
}),
React.createElement("div", { className: dropdownClassNames, ref: dropdownRef },
children,
footer && footerContent)));
}
}
});
CPicker.displayName = 'CPicker';
CPicker.propTypes = {
children: PropTypes.node,
className: PropTypes.string,
container: PropTypes.oneOf(['dropdown', 'inline']),
disabled: PropTypes.bool,
dropdownClassNames: PropTypes.string,
footer: PropTypes.bool,
footerContent: PropTypes.node,
onHide: PropTypes.func,
onShow: PropTypes.func,
toggler: PropTypes.node,
visible: PropTypes.bool,
};
exports.CPicker = CPicker;
//# sourceMappingURL=CPicker.js.map
;