BlockEvent.jsx 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. import React from 'react'
  2. import LazyLoad from 'react-lazyload'
  3. import cls from 'classnames'
  4. import Block from './base/Block'
  5. import BlockChildren from './base/BlockChildren'
  6. import BlockOrder from './base/BlockOrder'
  7. import BlockDel from './base/BlockDel'
  8. import BlockCite from './base/BlockCite'
  9. import BlockMemo from './base/BlockMemo'
  10. import BlockEventTrigger from './base/event/BlockEventTrigger'
  11. import BlockEventCons from './base/event/BlockEventCons'
  12. export default class BlockEvent extends Block {
  13. constructor(props) {
  14. super(props)
  15. }
  16. render() {
  17. let jengaContent = document.getElementsByClassName('jenga-content')[0]
  18. let getRelChildComs = () => {
  19. return this.state.hasChildren ? (
  20. <React.Fragment>
  21. {this.state.isExpand ? (
  22. <span
  23. className={cls(
  24. 'index-line',
  25. 'index-main-line',
  26. 'index-line-' + this.getNextLineColor()
  27. )}
  28. />
  29. ) : null}
  30. <button
  31. className={cls(
  32. 'btn-clear btn-toggle-sub btn-expand',
  33. 'btn-toggle-sub-' +
  34. (this.state.isExpand ? 'expand-' : 'collapse-') +
  35. this.getLineColor()
  36. )}
  37. onClick={this.onToggleBlockExpand}
  38. />
  39. </React.Fragment>
  40. ) : (
  41. <div
  42. className={cls(
  43. 'btn-clear btn-toggle-sub btn-toggle-sub-empty',
  44. 'btn-toggle-sub-empty-' + this.getLineColor()
  45. )}
  46. />
  47. )
  48. }
  49. return (
  50. <LazyLoad height={26} overflow={true} scrollContainer={jengaContent}>
  51. <div className="block-wrap block-wrap-event f--h">
  52. <span
  53. className={cls(
  54. 'index-line index-line-event',
  55. 'index-line-' + this.getLineColor(),
  56. {
  57. 'index-last-line': this.props.isLast
  58. }
  59. )}
  60. style={this.indexLeftStyle()}
  61. />
  62. <div
  63. className={cls('flex-1', {
  64. 'flex-wrap-disabled': !this.state.isEnable
  65. })}
  66. >
  67. <div
  68. className={cls('block-item block-event f--h', {
  69. 'block-active': this.state.isActive
  70. })}
  71. onDragOver={this.onDragOver}
  72. onDrop={this.onDrop}
  73. onClick={this.onSelectBlock}
  74. onContextMenu={this.onContextMenu}
  75. >
  76. <BlockDel
  77. isActive={this.state.isActive}
  78. layer={this.props.layer}
  79. bid={this.props.bid}
  80. />
  81. <BlockOrder
  82. layer={this.props.layer}
  83. bid={this.props.bid}
  84. eventNodeId={this.props.eventNodeId}
  85. extraGapGroupLayer={this.extraGapGroupLayer()}
  86. />
  87. <div
  88. className="block-gap"
  89. style={{
  90. left: -this.getGapLeft() + 'px',
  91. padding: '0 ' + this.getGapLeft() / 2 + 'px'
  92. }}
  93. />
  94. {getRelChildComs()}
  95. <div
  96. id={'block-main-' + this.props.bid}
  97. className="block-main flex-1 f--h"
  98. style={this.blockMainStyle()}
  99. draggable={true}
  100. onDragStart={this.onDragStart}
  101. onDragEnd={this.onDragEnd}
  102. >
  103. <div
  104. id={'over-cover-' + this.props.bid}
  105. className="over-cover"
  106. />
  107. <div className="event-trigger-wrap">
  108. <BlockEventTrigger
  109. bid={this.props.bid}
  110. isEnable={this.state.isEnable}
  111. eventNodeId={this.props.eventNodeId}
  112. />
  113. </div>
  114. <BlockEventCons bid={this.props.bid} />
  115. </div>
  116. <BlockCite
  117. bid={this.props.bid}
  118. eventNodeId={this.props.eventNodeId}
  119. />
  120. <BlockMemo
  121. className="block-event-memo"
  122. active={this.state.isActive}
  123. bid={this.props.bid}
  124. eventNodeId={this.props.eventNodeId}
  125. />
  126. </div>
  127. {this.state.isExpand ? (
  128. <BlockChildren
  129. loops={this.getLoops()}
  130. layer={this.props.layer + 1}
  131. groupLayer={this.props.groupLayer}
  132. nestGroupLayer={0}
  133. offspringInNestGroupLayer={this.props.nestGroupLayer}
  134. extraGapGroupLayer={this.extraGapGroupLayer()}
  135. parentBid={this.props.bid}
  136. eventNodeId={this.props.eventNodeId}
  137. visibleBlockIds={this.props.visibleBlockIds}
  138. />
  139. ) : null}
  140. </div>
  141. </div>
  142. </LazyLoad>
  143. )
  144. }
  145. }