You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

224 lines
5.5 KiB

<
import React, { Component, cloneElement } from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import omit from 'omit.js';
import Group from './Group';
import Search from './Search';
import TextArea from './TextArea';
function fixControlledValue(value) {
if (typeof value === 'undefined' || value === null) {
return '';
}
return value;
}
export interface AbstractInputProps {
prefixCls?: string;
className?: string;
defaultValue?: any;
value?: any;
style?: React.CSSProperties;
}
export interface InputProps extends AbstractInputProps {
placeholder?: string;
type?: string;
id?: number | string;
name?: string;
size?: 'large' | 'default' | 'small';
disabled?: boolean;
readOnly?: boolean;
addonBefore?: React.ReactNode;
addonAfter?: React.ReactNode;
onPressEnter?: React.FormEventHandler<any>;
8 years ago
onKeyDown?: React.FormEventHandler<any>;
onChange?: React.FormEventHandler<any>;
8 years ago
onClick?: React.FormEventHandler<any>;
onFocus?: React.FormEventHandler<any>;
8 years ago
onBlur?: React.FormEventHandler<any>;
8 years ago
autoComplete?: 'on' | 'off';
prefix?: React.ReactNode;
suffix?: React.ReactNode;
8 years ago
spellCheck?: boolean;
autoFocus?: boolean;
}
8 years ago
export default class Input extends Component<InputProps, any> {
static Group: typeof Group;
static Search: typeof Search;
static TextArea: typeof TextArea;
static defaultProps = {
prefixCls: 'ant-input',
type: 'text',
disabled: false,
};
static propTypes = {
type: PropTypes.string,
id: PropTypes.oneOfType([
PropTypes.string,
PropTypes.number,
]),
size: PropTypes.oneOf(['small', 'default', 'large']),
disabled: PropTypes.bool,
value: PropTypes.any,
defaultValue: PropTypes.any,
className: PropTypes.string,
addonBefore: PropTypes.node,
addonAfter: PropTypes.node,
prefixCls: PropTypes.string,
autosize: PropTypes.oneOfType([PropTypes.bool, PropTypes.object]),
onPressEnter: PropTypes.func,
onKeyDown: PropTypes.func,
onFocus: PropTypes.func,
onBlur: PropTypes.func,
prefix: PropTypes.node,
suffix: PropTypes.node,
};
refs: {
input: HTMLInputElement;
};
handleKeyDown = (e) => {
const { onPressEnter, onKeyDown } = this.props;
if (e.keyCode === 13 && onPressEnter) {
onPressEnter(e);
}
if (onKeyDown) {
onKeyDown(e);
}
}
focus() {
this.refs.input.focus();
}
blur() {
this.refs.input.blur();
}
renderLabeledInput(children) {
const props = this.props;
// Not wrap when there is not addons
if ((!props.addonBefore && !props.addonAfter)) {
return children;