math-dropdown.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { ListGroupItem } from 'react-bootstrap'
  2. import { ToolbarButtonMenu } from './button-menu'
  3. import { emitToolbarEvent } from '../../extensions/toolbar/utils/analytics'
  4. import MaterialIcon from '../../../../shared/components/material-icon'
  5. import { useTranslation } from 'react-i18next'
  6. import { useCodeMirrorViewContext } from '../codemirror-editor'
  7. import {
  8. wrapInDisplayMath,
  9. wrapInInlineMath,
  10. } from '../../extensions/toolbar/commands'
  11. import { memo } from 'react'
  12. export const MathDropdown = memo(function MathDropdown() {
  13. const { t } = useTranslation()
  14. const view = useCodeMirrorViewContext()
  15. return (
  16. <ToolbarButtonMenu
  17. id="toolbar-math"
  18. label={t('toolbar_insert_math')}
  19. icon="calculate"
  20. materialIcon
  21. >
  22. <ListGroupItem
  23. aria-label={t('toolbar_insert_inline_math')}
  24. onClick={event => {
  25. emitToolbarEvent(view, 'toolbar-inline-math')
  26. event.preventDefault()
  27. wrapInInlineMath(view)
  28. view.focus()
  29. }}
  30. >
  31. <MaterialIcon type="123" />
  32. <span>{t('toolbar_insert_inline_math')}</span>
  33. </ListGroupItem>
  34. <ListGroupItem
  35. aria-label={t('toolbar_insert_display_math')}
  36. onClick={event => {
  37. emitToolbarEvent(view, 'toolbar-display-math')
  38. event.preventDefault()
  39. wrapInDisplayMath(view)
  40. view.focus()
  41. }}
  42. >
  43. <MaterialIcon type="view_day" />
  44. <span>{t('toolbar_insert_display_math')}</span>
  45. </ListGroupItem>
  46. </ToolbarButtonMenu>
  47. )
  48. })