rsuite
Version:
A suite of react components
45 lines • 1.56 kB
JavaScript
'use client';
import _extends from "@babel/runtime/helpers/esm/extends";
import React from 'react';
import Input from "../Input/index.js";
import { createChainedFunction } from "../internals/utils/index.js";
export function defaultRenderInput(props, ref) {
return /*#__PURE__*/React.createElement(Input, _extends({
ref: ref
}, props));
}
const pickers = ['DatePicker', 'DateRangePicker', 'TimePicker', 'TimeRangePicker', 'InputPicker', 'TagPicker', 'Cascader', 'MultiCascader', 'SelectPicker', 'CheckPicker', 'CheckTreePicker', 'TreePicker'];
function getDisplayName(Component) {
if (typeof Component?.type === 'string') {
return Component?.type;
}
return Component?.type?.displayName || '';
}
export function renderChildren(children, props, ref) {
if (typeof children === 'function') {
return children(props, ref);
}
if (pickers.includes(getDisplayName(children))) {
const {
onBlur,
...rest
} = props;
const childElement = children;
const {
onExit,
onClean
} = childElement.props;
return /*#__PURE__*/React.cloneElement(childElement, {
...rest,
// Pass onBlur to the child component to automatically save or cancel after the focus event is processed.
// Special handling in the Picker component, call onBlur when onExit and onClean
onExit: createChainedFunction(() => onBlur?.(), onExit),
onClean: createChainedFunction(() => onBlur?.(), onClean),
ref
});
}
return /*#__PURE__*/React.cloneElement(children, {
...props,
ref
});
}