colorpicker.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import React from "react"
  2. import ReactDOM from "react-dom"
  3. const initColorpicker = ({ elementId }) => {
  4. const element = document.getElementById(elementId)
  5. if (!element) console.error("Element with id " + element + "doesn't exist!")
  6. const name = element.name
  7. const value = element.value
  8. const container = document.createElement("div")
  9. element.parentNode.insertBefore(container, element)
  10. element.remove()
  11. ReactDOM.render(<ColorPicker name={name} value={value} />, container)
  12. }
  13. class ColorPicker extends React.Component {
  14. state = { value: this.props.value }
  15. onChange = ({ target }) => {
  16. this.setState({ value: target.value })
  17. }
  18. render() {
  19. return (
  20. <div className="row">
  21. <div className="col-auto pr-0">
  22. <input
  23. type="color"
  24. className="form-control"
  25. style={{ width: "48px" }}
  26. value={cleanColor(this.state.value)}
  27. onChange={this.onChange}
  28. />
  29. </div>
  30. <div className="col">
  31. <input
  32. type="text"
  33. className="form-control"
  34. name={this.props.name}
  35. value={this.state.value}
  36. onChange={this.onChange}
  37. />
  38. </div>
  39. </div>
  40. )
  41. }
  42. }
  43. const color = /^#[0-9a-fA-F]{6}$/
  44. const cleanColor = value => {
  45. return color.test(value) ? value : "#ffffff"
  46. }
  47. export default initColorpicker