shinkansen-cogs
Version:
128 lines (110 loc) • 2.27 kB
JSX
/**
* @typedef {CogsTypes.OnEventType} OnEventType
* @typedef {CogsTypes.Cogs.ValueProps} ValueProps
* @typedef {CogsTypes.Cogs.Text.TextProps} TextProps
*/
/**
* TextCog component
*/
import React from 'react'
import classnames from 'classnames'
import {
ValueCog
} from '#cogs/cogs'
import Title from '#cogs/cogs/text/title'
import Description from '#cogs/cogs/text/description'
import ErrorMessage from '#cogs/cogs/text/error-message'
import Field from '#cogs/cogs/text/field'
/**
* @type {OnEventType}
*/
function DEFAULT_HANDLE_EVENT () {
//
}
/**
* @extends {ValueCog<ValueProps & TextProps>}
*/
export default class TextCog extends ValueCog {
getClassName () {
return classnames(super.getClassName(), 'text')
}
/**
* @param {string} name
* @param {string | string[]} [value]
*/
handleChange = (name, value) => {
const {
onChange = DEFAULT_HANDLE_EVENT
} = this.props
onChange(name, value)
}
renderTitle () {
const id = this.getId()
const {
title,
required = false,
disabled = false,
readOnly = false
} = this.props
return (
<Title
id={id}
title={title}
required={required}
disabled={disabled}
readOnly={readOnly}
/>
)
}
renderDescription () {
const {
description
} = this.props
return (
<Description
description={description}
/>
)
}
renderErrorMessage () {
const {
errorMessage
} = this.props
return (
<ErrorMessage
errorMessage={errorMessage}
/>
)
}
renderField () {
const id = this.getId()
const {
name,
value,
defaultValue,
required = false,
disabled = false,
readOnly = false,
tabIndex,
accessKey,
placeholder,
fieldRef
} = this.props
return (
<Field
name={name}
id={id}
value={value}
defaultValue={defaultValue}
required={required}
disabled={disabled}
readOnly={readOnly}
tabIndex={tabIndex}
accessKey={accessKey}
placeholder={placeholder}
onChange={this.handleChange}
fieldRef={fieldRef}
/>
)
}
}