ElectronicBabylonianLiterature/ebl-frontend

View on GitHub
src/bibliography/ui/BibliographySearchForm.tsx

Summary

Maintainability
A
0 mins
Test Coverage
D
62%
import React, { Component } from 'react'
import { stringify } from 'query-string'
import _ from 'lodash'
import { Form, FormControl, Button, Row, Col } from 'react-bootstrap'
import { withRouter, RouteComponentProps } from 'react-router-dom'

type Props = { query: string | null | undefined } & RouteComponentProps

class BibliographySearch extends Component<Props, { query: string }> {
  state = {
    query: this.props.query || '',
  }
  id = _.uniqueId('BibliographySearch-')

  onChange = (event) => {
    this.setState({
      query: event.target.value,
    })
  }

  submit = (event) => {
    event.preventDefault()
    this.props.history.push(`?${stringify({ query: this.state.query })}`)
  }

  render() {
    return (
      <Form onSubmit={this.submit}>
        <Form.Group as={Row} controlId={this.id}>
          <Col sm={8}>
            <FormControl
              aria-label="Bibliography-Query"
              type="text"
              value={this.state.query}
              placeholder="Author Year Title / Container-Title-Short Collection-Number"
              onChange={this.onChange}
            />
          </Col>
          <Col sm={4}>
            <Button type="submit" variant="primary">
              Search
            </Button>
          </Col>
        </Form.Group>
      </Form>
    )
  }
}

export default withRouter(BibliographySearch)