BlockEvent.jsx 4.7 KB

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