Folder.jsx 5.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import React from 'react'
  2. import { translate } from 'react-i18next'
  3. import PropTypes from 'prop-types'
  4. import classnames from 'classnames'
  5. // import FileItem from './ContentItem.jsx'
  6. // import PopupExtandedAction from '../../container/PopupExtandedAction.jsx'
  7. import SubDropdownCreateButton from '../common/Input/SubDropdownCreateButton.jsx'
  8. import BtnExtandedAction from './BtnExtandedAction.jsx'
  9. class Folder extends React.Component {
  10. constructor (props) {
  11. super(props)
  12. this.state = {
  13. open: false
  14. }
  15. }
  16. handleClickToggleFolder = () => {
  17. !this.state.open && this.props.folderData.content.length === 0 && this.props.onClickFolder(this.props.folderData.id)
  18. this.setState({open: !this.state.open})
  19. }
  20. handleClickCreateContent = (e, folder, type) => {
  21. e.stopPropagation() // because we have a link inside a link (togler and newFile)
  22. this.props.onClickCreateContent(folder, type)
  23. }
  24. render () {
  25. const {
  26. availableApp,
  27. folderData,
  28. // onClickItem,
  29. idRoleUserWorkspace,
  30. onClickExtendedAction,
  31. onClickCreateContent,
  32. // onClickFolder,
  33. isLast,
  34. t
  35. } = this.props
  36. return (
  37. <div className={classnames('folder', {'active': this.state.open && folderData.content.length > 0, 'item-last': isLast})}>
  38. <div className='folder__header align-items-center' onClick={this.handleClickToggleFolder}>
  39. <div className='folder__header__triangleborder'>
  40. <div className='folder__header__triangleborder__triangle' />
  41. </div>
  42. <div className='folder__header__icon'>
  43. <i className={classnames('fa fa-fw', {'fa-folder-open-o': this.state.open, 'fa-folder-o': !this.state.open})} />
  44. </div>
  45. <div className='folder__header__name'>
  46. { folderData.label }
  47. </div>
  48. <div className='folder__header__button'>
  49. {idRoleUserWorkspace >= 2 &&
  50. <div className='folder__header__button__addbtn'>
  51. <button
  52. className='addbtn__text btn btn-outline-primary dropdown-toggle'
  53. type='button'
  54. id='dropdownMenuButton'
  55. data-toggle='dropdown'
  56. aria-haspopup='true'
  57. aria-expanded='false'
  58. onClick={e => e.stopPropagation()}
  59. >
  60. {t('Create in folder...')}
  61. </button>
  62. <div className='addbtn__subdropdown dropdown-menu' aria-labelledby='dropdownMenuButton'>
  63. <SubDropdownCreateButton
  64. idFolder={null}
  65. availableApp={availableApp}
  66. onClickCreateContent={onClickCreateContent}
  67. />
  68. </div>
  69. <div className='d-none d-md-flex'>
  70. <BtnExtandedAction
  71. idRoleUserWorkspace={idRoleUserWorkspace}
  72. onClickExtendedAction={{
  73. edit: e => onClickExtendedAction.edit(e, folderData),
  74. move: e => onClickExtendedAction.move(e, folderData),
  75. download: e => onClickExtendedAction.download(e, folderData),
  76. archive: e => onClickExtendedAction.archive(e, folderData),
  77. delete: e => onClickExtendedAction.delete(e, folderData)
  78. }}
  79. />
  80. </div>
  81. </div>
  82. }
  83. </div>
  84. <div className='folder__header__status' />
  85. </div>
  86. <div className='folder__content'>
  87. {
  88. // folderData.map((c, i) => c.type === 'folder'
  89. // ? <Folder
  90. // app={app}
  91. // folderData={c}
  92. // onClickItem={onClickItem}
  93. // onClickExtendedAction={onClickExtendedAction}
  94. // onClickFolder={onClickFolder}
  95. // isLast={isLast}
  96. // t={t}
  97. // key={c.id}
  98. // />
  99. // : <FileItem
  100. // icon={(app[c.type] || {icon: ''}).icon}
  101. // name={c.title}
  102. // type={c.type}
  103. // status={c.status}
  104. // onClickItem={() => onClickItem(c)}
  105. // onClickExtendedAction={{
  106. // // we have to use the event here because it is the only place where we also have the content (c)
  107. // edit: e => onClickExtendedAction.edit(e, c),
  108. // move: e => onClickExtendedAction.move(e, c),
  109. // download: e => onClickExtendedAction.download(e, c),
  110. // archive: e => onClickExtendedAction.archive(e, c),
  111. // delete: e => onClickExtendedAction.delete(e, c)
  112. // }}
  113. // isLast={isLast && i === folderData.content.length - 1}
  114. // key={c.id}
  115. // />
  116. // )
  117. }
  118. </div>
  119. </div>
  120. )
  121. }
  122. }
  123. export default translate()(Folder)
  124. Folder.propTypes = {
  125. folderData: PropTypes.object,
  126. app: PropTypes.array,
  127. onClickItem: PropTypes.func.isRequired,
  128. onClickFolder: PropTypes.func.isRequired,
  129. isLast: PropTypes.bool.isRequired
  130. }