menu.tsx 871 B

12345678910111213141516171819202122232425262728293031
  1. import { MenuOption } from '@lexical/react/LexicalTypeaheadMenuPlugin'
  2. import { Fragment } from 'react'
  3. /**
  4. * Corresponds to the `MenuRenderFn` type from `@lexical/react/LexicalTypeaheadMenuPlugin`.
  5. */
  6. type MenuOptionRenderProps = {
  7. isSelected: boolean
  8. onSelect: () => void
  9. onSetHighlight: () => void
  10. queryString: string | null
  11. }
  12. export class PickerBlockMenuOption extends MenuOption {
  13. public group?: string
  14. constructor(
  15. private data: {
  16. key: string
  17. group?: string
  18. onSelect?: () => void
  19. render: (menuRenderProps: MenuOptionRenderProps) => JSX.Element
  20. },
  21. ) {
  22. super(data.key)
  23. this.group = data.group
  24. }
  25. public onSelectMenuOption = () => this.data.onSelect?.()
  26. public renderMenuOption = (menuRenderProps: MenuOptionRenderProps) => <Fragment key={this.data.key}>{this.data.render(menuRenderProps)}</Fragment>
  27. }