math-dropdown.tsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { ToolbarButtonMenu } from './button-menu'
  2. import { emitToolbarEvent } from '../../extensions/toolbar/utils/analytics'
  3. import MaterialIcon from '../../../../shared/components/material-icon'
  4. import { useTranslation } from 'react-i18next'
  5. import { useCodeMirrorViewContext } from '../codemirror-context'
  6. import {
  7. wrapInDisplayMath,
  8. wrapInInlineMath,
  9. } from '../../extensions/toolbar/commands'
  10. import { memo } from 'react'
  11. import OLListGroupItem from '@/features/ui/components/ol/ol-list-group-item'
  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={<MaterialIcon type="calculate" />}
  20. >
  21. <OLListGroupItem
  22. aria-label={t('toolbar_insert_inline_math')}
  23. onClick={event => {
  24. emitToolbarEvent(view, 'toolbar-inline-math')
  25. event.preventDefault()
  26. wrapInInlineMath(view)
  27. view.focus()
  28. }}
  29. >
  30. <MaterialIcon type="123" />
  31. <span>{t('toolbar_insert_inline_math')}</span>
  32. </OLListGroupItem>
  33. <OLListGroupItem
  34. aria-label={t('toolbar_insert_display_math')}
  35. onClick={event => {
  36. emitToolbarEvent(view, 'toolbar-display-math')
  37. event.preventDefault()
  38. wrapInDisplayMath(view)
  39. view.focus()
  40. }}
  41. >
  42. <MaterialIcon type="view_day" />
  43. <span>{t('toolbar_insert_display_math')}</span>
  44. </OLListGroupItem>
  45. </ToolbarButtonMenu>
  46. )
  47. })