figure-modal-source-picker.tsx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import { FC } from 'react'
  2. import {
  3. FigureModalSource,
  4. useFigureModalContext,
  5. } from './figure-modal-context'
  6. import Icon from '../../../../shared/components/icon'
  7. import { Button } from 'react-bootstrap'
  8. import { useTranslation } from 'react-i18next'
  9. import getMeta from '@/utils/meta'
  10. export const FigureModalSourcePicker: FC = () => {
  11. const { t } = useTranslation()
  12. const {
  13. hasLinkedProjectFileFeature,
  14. hasLinkedProjectOutputFileFeature,
  15. hasLinkUrlFeature,
  16. } = getMeta('ol-ExposedSettings')
  17. return (
  18. <div className="figure-modal-source-selector">
  19. <div className="figure-modal-source-button-grid">
  20. <FigureModalSourceButton
  21. type={FigureModalSource.FILE_UPLOAD}
  22. title={t('replace_from_computer')}
  23. icon="upload"
  24. />
  25. <FigureModalSourceButton
  26. type={FigureModalSource.FILE_TREE}
  27. title={t('replace_from_project_files')}
  28. icon="archive"
  29. />
  30. {(hasLinkedProjectFileFeature || hasLinkedProjectOutputFileFeature) && (
  31. <FigureModalSourceButton
  32. type={FigureModalSource.OTHER_PROJECT}
  33. title={t('replace_from_another_project')}
  34. icon="folder-open"
  35. />
  36. )}
  37. {hasLinkUrlFeature && (
  38. <FigureModalSourceButton
  39. type={FigureModalSource.FROM_URL}
  40. title={t('replace_from_url')}
  41. icon="globe"
  42. />
  43. )}
  44. </div>
  45. </div>
  46. )
  47. }
  48. const FigureModalSourceButton: FC<{
  49. type: FigureModalSource
  50. title: string
  51. icon: string
  52. }> = ({ type, title, icon }) => {
  53. const { dispatch } = useFigureModalContext()
  54. return (
  55. <Button
  56. bsStyle={null}
  57. bsClass=""
  58. className="figure-modal-source-button"
  59. onClick={() => {
  60. dispatch({ source: type, sourcePickerShown: false, getPath: undefined })
  61. }}
  62. >
  63. <Icon
  64. type={icon}
  65. className="figure-modal-source-button-icon source-icon"
  66. fw
  67. />
  68. <span className="figure-modal-source-button-title">{title}</span>
  69. <Icon
  70. type="chevron-right"
  71. className="figure-modal-source-button-icon"
  72. fw
  73. />
  74. </Button>
  75. )
  76. }