FileContentViewer.jsx 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import React from 'react'
  2. import PropTypes from 'prop-types'
  3. import PopinFixed from '../common/PopinFixed/PopinFixed'
  4. import PopinFixedHeader from '../common/PopinFixed/PopinFixedHeader.jsx'
  5. import PopinFixedOption from '../common/PopinFixed/PopinFixedOption.jsx'
  6. import PopinFixedContent from '../common/PopinFixed/PopinFixedContent.jsx'
  7. import PageHtml from './FileType/PageHtml.jsx'
  8. import Thread from './FileType/Thread.jsx'
  9. import Preview from './FileType/File.jsx'
  10. import Timeline from '../Timeline.jsx'
  11. import { FILE_TYPE } from '../../helper.js'
  12. const FileContentViewer = props => {
  13. const { customClass, icon } = FILE_TYPE.find(f => f.name === props.file.type) || {customClass: '', icon: ''}
  14. const [leftPart, rightPart] = (() => {
  15. switch (props.file.type) {
  16. case FILE_TYPE[0].name: // pageHtml
  17. return [
  18. <PageHtml version={props.file.version} text={props.file.text} />,
  19. <Timeline customClass={`${customClass}__contentpage`} />
  20. ]
  21. case FILE_TYPE[2].name: // file (preview)
  22. return [
  23. <Preview />,
  24. <Timeline customClass={`${customClass}__contentpage`} />
  25. ]
  26. case FILE_TYPE[3].name: // thread
  27. return [
  28. <Thread />
  29. ]
  30. }
  31. })()
  32. return (
  33. <PopinFixed customClass={`${customClass}`}>
  34. <PopinFixedHeader
  35. customClass={`${customClass}`}
  36. icon={icon}
  37. name={props.file.title}
  38. onClickCloseBtn={props.onClose}
  39. />
  40. <PopinFixedOption customClass={`${customClass}`} />
  41. <PopinFixedContent customClass={`${customClass}__contentpage`}>
  42. { leftPart }
  43. { rightPart }
  44. </PopinFixedContent>
  45. </PopinFixed>
  46. )
  47. }
  48. export default FileContentViewer
  49. FileContentViewer.PropTypes = {
  50. file: PropTypes.shape({
  51. type: PropTypes.oneOf(FILE_TYPE.map(f => f.name)).isRequired,
  52. title: PropTypes.string.isRequired
  53. }).isRequired,
  54. onClose: PropTypes.func.isRequired
  55. }