figure-modal-source-picker.tsx 2.1 KB

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