list.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /**
  2. * @author oldj
  3. * @blog https://oldj.net
  4. */
  5. 'use strict'
  6. import React from 'react'
  7. import ListItem from './list-item'
  8. import Sortable from 'sortablejs'
  9. import listToArray from 'wheel-js/src/common/listToArray'
  10. import Agent from '../Agent'
  11. import {findPositions} from '../content/kw'
  12. import './list.less'
  13. export default class List extends React.Component {
  14. constructor (props) {
  15. super(props)
  16. this.state = {
  17. kw: ''
  18. }
  19. Agent.on('search', kw => {
  20. this.setState({kw})
  21. })
  22. }
  23. customItems () {
  24. let kw = this.state.kw
  25. function match(kw, item) {
  26. return findPositions(kw, item.content).length > 0 || findPositions(kw, item.title).length > 0
  27. }
  28. return this.props.list.map((item, idx) => {
  29. let show = true
  30. if (kw && !match(kw, item)) {
  31. show = false
  32. }
  33. return (
  34. <ListItem
  35. data={item}
  36. idx={idx}
  37. current={this.props.current}
  38. setCurrent={this.props.setCurrent}
  39. key={'hosts-' + idx}
  40. show={show}
  41. />
  42. )
  43. })
  44. }
  45. getCurrentListFromDOM () {
  46. let nodes = this.refs.items.getElementsByClassName('list-item')
  47. nodes = listToArray(nodes)
  48. let ids = nodes.map(el => el.getAttribute('data-id'))
  49. Agent.emit('order', ids)
  50. }
  51. componentDidMount () {
  52. Sortable.create(this.refs.items, {
  53. group: 'list-sorting'
  54. , sort: true
  55. , animation: 150
  56. , onStart: () => {
  57. console.log('drag start..')
  58. }
  59. , onSort: (evt) => {
  60. this.getCurrentListFromDOM()
  61. //console.log(evt)
  62. console.log(evt.item)
  63. console.log(evt.oldIndex, evt.newIndex)
  64. }
  65. })
  66. }
  67. render () {
  68. return (
  69. <div id="sh-list">
  70. <ListItem
  71. data={this.props.sys_hosts}
  72. lang={this.props.lang}
  73. current={this.props.current}
  74. setCurrent={this.props.setCurrent}
  75. sys="1"/>
  76. <div ref="items" className="custom-items">
  77. {this.customItems()}
  78. </div>
  79. </div>
  80. )
  81. }
  82. }