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