file-tree-modal-create-file-body.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import React from 'react'
  2. import FileTreeCreateNewDoc from './modes/file-tree-create-new-doc'
  3. import FileTreeImportFromUrl from './modes/file-tree-import-from-url'
  4. import FileTreeImportFromProject from './modes/file-tree-import-from-project'
  5. import FileTreeUploadDoc from './modes/file-tree-upload-doc'
  6. import FileTreeModalCreateFileMode from './file-tree-modal-create-file-mode'
  7. import FileTreeCreateNameProvider from '../../contexts/file-tree-create-name'
  8. import { useFileTreeActionable } from '../../contexts/file-tree-actionable'
  9. import { useFileTreeMutable } from '../../contexts/file-tree-mutable'
  10. import importOverleafModules from '../../../../../macros/import-overleaf-module.macro'
  11. const createFileModeModules = importOverleafModules('createFileModes')
  12. export default function FileTreeModalCreateFileBody() {
  13. const { newFileCreateMode } = useFileTreeActionable()
  14. const { fileCount } = useFileTreeMutable()
  15. if (!fileCount || fileCount.status === 'error') {
  16. return null
  17. }
  18. return (
  19. <table>
  20. <tbody>
  21. <tr>
  22. <td className="modal-new-file--list">
  23. <ul className="list-unstyled">
  24. <FileTreeModalCreateFileMode
  25. mode="doc"
  26. icon="file"
  27. label="New File"
  28. />
  29. <FileTreeModalCreateFileMode
  30. mode="upload"
  31. icon="upload"
  32. label="Upload"
  33. />
  34. <FileTreeModalCreateFileMode
  35. mode="project"
  36. icon="folder-open"
  37. label="From Another Project"
  38. />
  39. {window.ExposedSettings.hasLinkUrlFeature && (
  40. <FileTreeModalCreateFileMode
  41. mode="url"
  42. icon="globe"
  43. label="From External URL"
  44. />
  45. )}
  46. {createFileModeModules.map(
  47. ({ import: { CreateFileMode }, path }) => (
  48. <CreateFileMode key={path} />
  49. )
  50. )}
  51. </ul>
  52. </td>
  53. <td
  54. className={`modal-new-file--body modal-new-file--body-${newFileCreateMode}`}
  55. >
  56. {newFileCreateMode === 'doc' && (
  57. <FileTreeCreateNameProvider initialName="name.tex">
  58. <FileTreeCreateNewDoc />
  59. </FileTreeCreateNameProvider>
  60. )}
  61. {newFileCreateMode === 'url' && (
  62. <FileTreeCreateNameProvider>
  63. <FileTreeImportFromUrl />
  64. </FileTreeCreateNameProvider>
  65. )}
  66. {newFileCreateMode === 'project' && (
  67. <FileTreeCreateNameProvider>
  68. <FileTreeImportFromProject />
  69. </FileTreeCreateNameProvider>
  70. )}
  71. {newFileCreateMode === 'upload' && <FileTreeUploadDoc />}
  72. {createFileModeModules.map(
  73. ({ import: { CreateFilePane }, path }) => (
  74. <CreateFilePane key={path} />
  75. )
  76. )}
  77. </td>
  78. </tr>
  79. </tbody>
  80. </table>
  81. )
  82. }