shinkansen-cogs
Version:
84 lines (75 loc) • 1.7 kB
JSX
/**
* @typedef {CogsTypes.Components.Field.ValueProps} ValueProps
* @typedef {CogsTypes.Components.Field.Text.TextProps} TextProps
*/
/**
* TextField component
*/
import React from 'react'
import classnames from 'classnames'
import {
ValueField,
toInputValue
} from '#cogs/components/field'
/**
* @extends {ValueField<ValueProps & TextProps>}
*/
export default class TextField extends ValueField {
getClassName () {
return classnames(super.getClassName(), 'text')
}
render () {
const {
name,
id,
defaultValue,
required = false,
disabled = false,
readOnly = false,
tabIndex,
accessKey,
placeholder,
fieldRef
} = this.props
const className = this.getClassName()
if (defaultValue === undefined) {
const {
value
} = this.props
return (
<input
name={name}
id={id}
value={toInputValue(value)}
required={required}
disabled={disabled}
readOnly={readOnly}
tabIndex={tabIndex}
accessKey={accessKey}
placeholder={placeholder}
onChange={this.handleChange}
className={className}
type='text'
ref={fieldRef}
/>
)
}
return (
<input
name={name}
id={id}
defaultValue={String(defaultValue)}
required={required}
disabled={disabled}
readOnly={readOnly}
tabIndex={tabIndex}
accessKey={accessKey}
placeholder={placeholder}
onChange={this.handleChange}
className={className}
type='text'
ref={fieldRef}
/>
)
}
}