import { forwardRef } from 'react'; import Icon from '../icon'; import { IInputCoreProps } from './types'; import { createUseIMEComposition } from '../ime-composition'; import cx from 'classnames'; function preventDefault(e: React.MouseEvent) { e.preventDefault(); } const useIMEComposition = createUseIMEComposition(); export const InputCore = forwardRef< HTMLInputElement, IInputCoreProps & { onClear: React.MouseEventHandler } >((props, ref) => { const { addonBefore, addonAfter, showClear, value: valueProp, onChange: onChangeProp, onCompositionStart: onCompositionStartProp, onCompositionEnd: onCompositionEndProp, onClear, width, size, onPressEnter, autoFocus, autoSelect, initSelectionStart, initSelectionEnd, icon, iconPosition = 'end', inline, onIconClick, ...otherProps } = props; const { value, onChange, onCompositionStart, onCompositionEnd } = useIMEComposition( valueProp, onChangeProp, onCompositionStartProp, onCompositionEndProp ); // No clear button when input is disabled or readonly const showClearIcon = showClear && valueProp && !otherProps.disabled && !otherProps.readOnly; const iconClass = cx('zent-input-icon', { 'zent-input-icon-click': !!onIconClick, }); return ( <> {addonBefore && (
{addonBefore}
)} {icon && iconPosition === 'front' ? ( ) : null} {showClearIcon && ( )} {icon && iconPosition === 'end' ? ( ) : null} {addonAfter &&
{addonAfter}
} ); }); InputCore.displayName = 'Input';