insert-figure-dropdown.tsx 1.9 KB

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