saarnilauri/fida-imu

View on GitHub
src/components/QuillEditor/index.js

Summary

Maintainability
A
1 hr
Test Coverage
import React, { Component } from 'react'
import PropTypes from 'prop-types'
import ReactQuill from 'react-quill'

const fullToolbarOptions = [
  ['bold', 'italic', 'underline', 'strike'], // toggled buttons
  [{ header: 1 }, { header: 2 }, 'blockquote'], // custom button values
  [{ list: 'ordered' }, { list: 'bullet' }],
  [{ indent: '-1' }, { indent: '+1' }], // outdent/indent
  [{ align: [] }],
  ['clean'], // remove formatting button
]
class QuillEditor extends Component {
  constructor(props) {
    super(props)
    this.state = { text: '' }
    this.handleChange = this.handleChange.bind(this)
  }

  handleChange(value) {
    this.setState({ text: value })
    this.props.onChange(value, this.props.name)
  }

  render() {
    const modules = {
      toolbar: [
        ['bold', 'italic', 'underline', { header: 1 }],
        [{ list: 'ordered' }, { list: 'bullet' }],
      ],
    }
    const formats = [
      'header',
      'bold',
      'italic',
      'underline',
      'strike',
      'blockquote',
      'list',
      'bullet',
      'indent',
    ]
    const { editMode, full } = this.props
    if (full) {
      modules.toolbar = fullToolbarOptions
    }
    const view =
      editMode === true ? (
        <div className="scrolling-container">
          <ReactQuill
            theme="snow"
            placeholder="Start adding content..."
            defaultValue={this.props.defaultValue}
            onChange={this.handleChange}
            modules={modules}
            formats={formats}
          />
        </div>
      ) : (
        /* eslint-disable */
        <div
          dangerouslySetInnerHTML={{
            __html: this.state.text ? this.state.text : this.props.defaultValue,
          }}
        />
        /* eslint-enable */
      )
    return view
  }
}

QuillEditor.defaultProps = {
  editMode: true,
  full: false,
}

QuillEditor.propTypes = {
  name: PropTypes.string.isRequired,
  full: PropTypes.bool,
  onChange: PropTypes.func.isRequired,
  editMode: PropTypes.bool,
  defaultValue: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),
}

export default QuillEditor