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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import { useTranslation } from 'react-i18next'
  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 { useFileTreeData } from '../../../../shared/context/file-tree-data-context'
  10. import importOverleafModules from '../../../../../macros/import-overleaf-module.macro'
  11. const createFileModeModules = importOverleafModules('createFileModes')
  12. export default function FileTreeModalCreateFileBody() {
  13. const { t } = useTranslation()
  14. const { newFileCreateMode } = useFileTreeActionable()
  15. const { fileCount } = useFileTreeData()
  16. if (!fileCount || fileCount.status === 'error') {
  17. return null
  18. }
  19. return (
  20. <table>
  21. <tbody>
  22. <tr>
  23. <td className="modal-new-file--list">
  24. <ul className="list-unstyled">
  25. <FileTreeModalCreateFileMode
  26. mode="doc"
  27. icon="file"
  28. label={t('new_file')}
  29. />
  30. <FileTreeModalCreateFileMode
  31. mode="upload"
  32. icon="upload"
  33. label={t('upload')}
  34. />
  35. {(window.ExposedSettings.hasLinkedProjectFileFeature ||
  36. window.ExposedSettings.hasLinkedProjectOutputFileFeature) && (
  37. <FileTreeModalCreateFileMode
  38. mode="project"
  39. icon="folder-open"
  40. label={t('from_another_project')}
  41. />
  42. )}
  43. {window.ExposedSettings.hasLinkUrlFeature && (
  44. <FileTreeModalCreateFileMode
  45. mode="url"
  46. icon="globe"
  47. label={t('from_external_url')}
  48. />
  49. )}
  50. {createFileModeModules.map(
  51. ({ import: { CreateFileMode }, path }) => (
  52. <CreateFileMode key={path} />
  53. )
  54. )}
  55. </ul>
  56. </td>
  57. <td
  58. className={`modal-new-file--body modal-new-file--body-${newFileCreateMode}`}
  59. >
  60. {newFileCreateMode === 'doc' && (
  61. <FileTreeCreateNameProvider initialName="name.tex">
  62. <FileTreeCreateNewDoc />
  63. </FileTreeCreateNameProvider>
  64. )}
  65. {newFileCreateMode === 'url' && (
  66. <FileTreeCreateNameProvider>
  67. <FileTreeImportFromUrl />
  68. </FileTreeCreateNameProvider>
  69. )}
  70. {newFileCreateMode === 'project' && (
  71. <FileTreeCreateNameProvider>
  72. <FileTreeImportFromProject />
  73. </FileTreeCreateNameProvider>
  74. )}
  75. {newFileCreateMode === 'upload' && <FileTreeUploadDoc />}
  76. {createFileModeModules.map(
  77. ({ import: { CreateFilePane }, path }) => (
  78. <CreateFilePane key={path} />
  79. )
  80. )}
  81. </td>
  82. </tr>
  83. </tbody>
  84. </table>
  85. )
  86. }