BlockOrder.jsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import React from 'react'
  2. import cls from 'classnames'
  3. import { shallowEqualImmutable } from 'src/utils/utils'
  4. import { getEventNodeById } from 'stores/funcs/newEvent'
  5. import newEventStores from 'stores/newEvent'
  6. export default class BlockOrder extends React.Component {
  7. constructor(props) {
  8. super(props)
  9. this.curEventNodeId = newEventStores.curEventNodeId
  10. this.state = {
  11. order: this.getOrder()
  12. }
  13. this.onEventChange = this.onEventChange.bind(this)
  14. this.getStyle = this.getStyle.bind(this)
  15. this.getOrder = this.getOrder.bind(this)
  16. this.decoOrder = this.decoOrder.bind(this)
  17. }
  18. shouldComponentUpdate(nextProps, nextState) {
  19. return (
  20. !shallowEqualImmutable(this.props, nextProps) ||
  21. !shallowEqualImmutable(this.state, nextState)
  22. )
  23. }
  24. componentDidMount() {
  25. this.unsubscribe = newEventStores.listen(this.onEventChange)
  26. }
  27. componentWillUnmount() {
  28. this.unsubscribe()
  29. }
  30. componentDidUpdate(preProps) {
  31. // parentBid改变时需要更新
  32. if (preProps.bid !== this.props.bid) {
  33. let order = this.getOrder()
  34. if (order !== this.state.order) {
  35. this.setState({
  36. order: order
  37. })
  38. }
  39. }
  40. }
  41. onEventChange(status) {
  42. let obj = {}
  43. if (status) {
  44. if (status.types.includes('curEventNodeId')) {
  45. if (this.curEventNodeId !== status.data.curEventNodeId) {
  46. this.curEventNodeId = status.data.curEventNodeId
  47. }
  48. }
  49. if (status.types.includes('curEventBlockOrder')) {
  50. let order = this.getOrder()
  51. if (order !== this.state.order) {
  52. this.setState({
  53. order: order
  54. })
  55. }
  56. }
  57. }
  58. if (Object.keys(obj).length > 0) {
  59. this.setState(obj)
  60. }
  61. }
  62. getOrder() {
  63. let curNodeId = this.props.eventNodeId || this.curEventNodeId
  64. let eventNode = getEventNodeById(curNodeId)
  65. if (eventNode) {
  66. return eventNode.events.order.indexOf(this.props.bid)
  67. }
  68. return 0
  69. }
  70. getStyle() {
  71. const extraGapGroupLayer =
  72. this.props.extraGapGroupLayer > 0
  73. ? (this.props.extraGapGroupLayer - 1) * 2
  74. : 0
  75. return {
  76. left:
  77. -(
  78. 8 +
  79. this.props.layer * 20 +
  80. (this.props.layer + 1) +
  81. extraGapGroupLayer
  82. ) -
  83. 28 +
  84. 'px'
  85. }
  86. }
  87. decoOrder() {
  88. let result = this.state.order + 1
  89. if (result < 10) {
  90. result = '0' + result
  91. }
  92. return result
  93. }
  94. render() {
  95. let { className } = this.props
  96. return (
  97. <div
  98. className={cls('block-order f--h', className)}
  99. style={this.getStyle()}
  100. >
  101. <div className="order-num f--hlc">
  102. <div className="num">{this.decoOrder()}</div>
  103. </div>
  104. <div className="order-dot f--hlc">
  105. <div className="dot" />
  106. </div>
  107. </div>
  108. )
  109. }
  110. }