kitten-components
Version:
Front-end components library
99 lines (84 loc) • 2.43 kB
JavaScript
import React, { Component } from 'react'
import classNames from 'classnames'
import { domElementHelper } from 'kitten/helpers/dom/element-helper'
import { TextInput } from 'kitten/components/form/text-input'
import { SearchIcon } from 'kitten/components/icons/search-icon'
export class Search extends Component {
constructor(props) {
super(props)
this.state = {
focus: false,
hover: false,
}
// These listeners help us to handle the text input display depending on the
// submit input state (as we cannot handle it directly in css).
this.handleSubmitFocus = this.handleSubmitFocus.bind(this)
this.handleSubmitBlur = this.handleSubmitBlur.bind(this)
this.handleSubmitMouseOver = this.handleSubmitMouseOver.bind(this)
this.handleSubmitMouseOut = this.handleSubmitMouseOut.bind(this)
}
// Component listeners callbacks.
handleSubmitFocus() {
this.setState({ focus: true })
}
handleSubmitBlur() {
this.setState({ focus: false })
}
handleSubmitMouseOver() {
this.setState({ hover: true })
}
handleSubmitMouseOut() {
this.setState({ hover: false })
}
// Rendering.
render() {
const {
className,
actionUrl,
inputId,
inputName,
inputPlaceholder,
inputLabel,
submitLabel,
...others
} = this.props
let inputClassName = classNames(
'k-TextInput',
'k-TextInput--tiny',
'k-SearchInput__input',
{ 'is-active': this.state.focus },
{ 'is-hover': this.state.hover },
)
return (
<form
className="k-SearchInput"
role="search"
action={actionUrl}
acceptCharset="UTF-8"
method="get"
>
<TextInput
className={inputClassName}
type="search"
id={inputId}
name={inputName}
placeholder={inputPlaceholder}
aria-label={inputLabel}
/>
<button
type="submit"
aria-label={submitLabel}
className="k-SearchInput__submit k-SearchInput__submit--tiny"
onFocus={this.handleSubmitFocus}
onBlur={this.handleSubmitBlur}
onMouseOver={this.handleSubmitMouseOver}
onMouseOut={this.handleSubmitMouseOut}
>
<SearchIcon width="14" height="14" />
</button>
</form>
)
}
}
// DEPRECATED: do not use default export.
export default Search