Folder.jsx 2.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import React, { Component } from 'react'
  2. import PropTypes from 'prop-types'
  3. import classnames from 'classnames'
  4. import FileItem from './FileItem.jsx'
  5. // @TODO set Folder as a component, state open will come from parent container (which will come from redux) // update: or not ?
  6. class Folder extends Component {
  7. constructor (props) {
  8. super(props)
  9. this.state = {
  10. open: false
  11. }
  12. this.handleClickToggleFolder = this.handleClickToggleFolder.bind(this)
  13. }
  14. handleClickToggleFolder = () => this.setState({open: !this.state.open})
  15. handleClickNewFile = e => {
  16. e.stopPropagation() // because we have a link inside a link (togler and newFile)
  17. console.log('new file') // @TODO
  18. }
  19. render () {
  20. const { app, folderData: { title, content } } = this.props
  21. return (
  22. <div className={classnames('folder', {'active': this.state.open})}>
  23. <div className='folder__header' onClick={this.handleClickToggleFolder}>
  24. <div className='folder__header__triangleborder'>
  25. <div className='folder__header__triangleborder__triangle' />
  26. </div>
  27. <div className='folder__header__name'>
  28. <div className='folder__header__name__icon'>
  29. <i className='fa fa-folder-open-o' />
  30. </div>
  31. <div className='folder__header__name__text'>
  32. { title }
  33. </div>
  34. <div className='folder__header__name__addbtn' onClick={this.handleClickNewFile}>
  35. <div className='folder__header__name__addbtn__text btn btn-primary'>
  36. créer ...
  37. </div>
  38. </div>
  39. </div>
  40. <div className='folder__header__contenttype'>
  41. <div className='folder__header__contenttype__text'>
  42. Type de Contenu :
  43. </div>
  44. <div className='folder__header__contenttype__icon'>
  45. <i className='fa fa-list-ul' />
  46. <i className='fa fa-file-text-o' />
  47. <i className='fa fa-comments' />
  48. </div>
  49. </div>
  50. </div>
  51. <div className='folder__content'>
  52. { content.map(c => c.type === 'folder'
  53. ? <Folder folderData={c} key={c.id} />
  54. : <FileItem
  55. icon={(app[c.type] || {icon: ''}).icon}
  56. name={c.title}
  57. type={c.type}
  58. status={c.status}
  59. onClickItem={() => {}}
  60. key={c.id}
  61. />
  62. )}
  63. </div>
  64. </div>
  65. )
  66. }
  67. }
  68. export default Folder
  69. Folder.propTypes = {
  70. folderData: PropTypes.shape({
  71. title: PropTypes.string.isRequired,
  72. content: PropTypes.array
  73. }),
  74. app: PropTypes.object
  75. }