insert-figure-dropdown.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { ListGroupItem } from 'react-bootstrap'
  2. import { ToolbarButtonMenu } from './button-menu'
  3. import Icon from '../../../../shared/components/icon'
  4. import { useCallback } from 'react'
  5. import { FigureModalSource } from '../figure-modal/figure-modal-context'
  6. import { useTranslation } from 'react-i18next'
  7. import { emitCommandEvent } from '../../extensions/toolbar/utils/analytics'
  8. import { useCodeMirrorViewContext } from '../codemirror-editor'
  9. export const InsertFigureDropdown = () => {
  10. const { t } = useTranslation()
  11. const view = useCodeMirrorViewContext()
  12. const openFigureModal = useCallback(
  13. (source: FigureModalSource, sourceName: string) => {
  14. emitCommandEvent(view, `toolbar-figure-modal-${sourceName}`)
  15. window.dispatchEvent(
  16. new CustomEvent('figure-modal:open', {
  17. detail: source,
  18. })
  19. )
  20. },
  21. [view]
  22. )
  23. return (
  24. <ToolbarButtonMenu
  25. id="toolbar-figure"
  26. label={t('toolbar_insert_figure')}
  27. icon="picture-o"
  28. >
  29. <ListGroupItem
  30. onClick={() =>
  31. openFigureModal(FigureModalSource.FILE_UPLOAD, 'file-upload')
  32. }
  33. >
  34. <Icon type="upload" fw /> Upload from computer
  35. </ListGroupItem>
  36. <ListGroupItem
  37. onClick={() =>
  38. openFigureModal(FigureModalSource.FILE_TREE, 'current-project')
  39. }
  40. >
  41. <Icon type="archive" fw /> From project files
  42. </ListGroupItem>
  43. <ListGroupItem
  44. onClick={() =>
  45. openFigureModal(FigureModalSource.OTHER_PROJECT, 'other-project')
  46. }
  47. >
  48. <Icon type="folder-open" fw /> From another project
  49. </ListGroupItem>
  50. <ListGroupItem
  51. onClick={() => openFigureModal(FigureModalSource.FROM_URL, 'from-url')}
  52. >
  53. <Icon type="globe" fw /> From URL
  54. </ListGroupItem>
  55. </ToolbarButtonMenu>
  56. )
  57. }