Advertisement
Guest User

Untitled

a guest
Jul 25th, 2016
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.86 KB | None | 0 0
  1. import React from 'react'
  2. import prettifySize from './prettify_size'
  3.  
  4. const AttributeFilter = React.createClass({
  5.  
  6. propTypes: {
  7. targetName: React.PropTypes.string.isRequired,
  8. items: React.PropTypes.array.isRequired,
  9. activeItems: React.PropTypes.arrayOf(React.PropTypes.number) || []
  10. },
  11.  
  12. getInitialState() {
  13. return {
  14. checkedItems: this.props.activeItems || []
  15. }
  16. },
  17.  
  18. render() {
  19. let items = this.props.items
  20.  
  21. if (this.props.targetName == 'size') {
  22. items = items.sort((a, b) => a.name - b.name)
  23. }
  24.  
  25. items = items.map((item, i) => {
  26. let label = this.props.targetName == 'size' ? prettifySize(item.name) : item.name
  27.  
  28. return <li key={i}>
  29. <label className="inp-item">
  30. <input checked={this._isActive(item.id)}
  31. onChange={this._toggleItem.bind(null, item.id)} type="checkbox"
  32. name="category"/>
  33. <span>{label}</span>
  34. </label>
  35. </li>
  36. })
  37.  
  38. const columns = this.props.columns ? ' columns' : ''
  39.  
  40. return (
  41. <ul className={`reset inp-items${columns}`}>
  42. {items}
  43. </ul>
  44. )
  45. },
  46.  
  47. _toggleItem(id) {
  48. let checkedItems = this.state.checkedItems
  49.  
  50. let index
  51. if( (index = $.inArray(id, checkedItems)) !== -1 ) {
  52. checkedItems.splice(index, 1)
  53. } else {
  54. checkedItems.push(id)
  55. }
  56.  
  57. this.setState({checkedItems}, () => {
  58. const e = new Event('filter.toggle')
  59. e.itemId = id
  60. e.name = this.props.targetName
  61. document.dispatchEvent(e)
  62. })
  63. },
  64.  
  65. _isActive(id) {
  66. return this.state.checkedItems.indexOf(id) !== -1
  67. }
  68. })
  69.  
  70. export default AttributeFilter
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement