import React, {
ReactElement,
InputHTMLAttributes,
ChangeEvent,
forwardRef,
} from 'react';
import classNames from 'classnames';
import { IconProp } from '@fortawesome/fontawesome-svg-core';
import Icon from '../Icon/icon';
type InputSize = 'lg' | 'sm';
export interface InputProps
extends Omit, 'size'> {
disabled?: boolean;
size?: InputSize;
icon?: IconProp;
prepend?: string | ReactElement;
append?: string | ReactElement;
onChange?: (e: ChangeEvent) => void;
}
export const Input = forwardRef((props, ref) => {
const { disabled, size, icon, prepend, append, style, ...restProps } = props;
const cnames = classNames('paypay-input-wrapper', {
[`input-size-${size}`]: size,
'is-disabled': disabled,
'input-group': prepend || append,
'input-group-append': !!append,
'input-group-prepend': !!prepend,
});
const fixControlledValue = (value: any) => {
if (typeof value === 'undefined' || value === null) {
return '';
}
return value;
};
if ('value' in props) {
delete restProps.defaultValue;
restProps.value = fixControlledValue(props.value);
}
return (
{prepend &&
{prepend}
}
{icon && (
)}
{append &&
{append}
}
);
});
export default Input;