remirror/remirror

View on GitHub
packages/remirror__react-components/src/menus/toggle-heading-menu-item.tsx

Summary

Maintainability
A
0 mins
Test Coverage
import React, { FC, useCallback } from 'react';
import { HeadingExtension, HeadingExtensionAttributes } from '@remirror/extension-heading';
import { useActive, useCommands } from '@remirror/react-core';

import { CommandMenuItem, CommandMenuItemProps } from './command-menu-item';

export interface ToggleHeadingMenuItemProps
  extends Omit<CommandMenuItemProps, 'commandName' | 'active' | 'enabled' | 'attrs' | 'onSelect'> {
  attrs?: Partial<HeadingExtensionAttributes>;
}

export const ToggleHeadingMenuItem: FC<ToggleHeadingMenuItemProps> = ({ attrs, ...rest }) => {
  const { toggleHeading } = useCommands<HeadingExtension>();

  const handleSelect = useCallback(() => {
    if (toggleHeading.enabled(attrs)) {
      toggleHeading(attrs);
    }
  }, [toggleHeading, attrs]);

  const active = useActive<HeadingExtension>().heading(attrs);
  const enabled = toggleHeading.enabled(attrs);

  return (
    <CommandMenuItem
      {...rest}
      commandName='toggleHeading'
      active={active}
      enabled={enabled}
      attrs={attrs}
      onSelect={handleSelect}
    />
  );
};