Skip to content
Snippets Groups Projects
Button.js 920 B
Newer Older
chris's avatar
chris committed
/* eslint react/prop-types: 0 */

chris's avatar
chris committed
import React, { useContext } from 'react';
import { WaxContext } from 'wax-prosemirror-core';
Yannis Barlas's avatar
Yannis Barlas committed
import MenuButton from '../ui/buttons/MenuButton';
chris's avatar
chris committed

const Button = ({ view = {}, item }) => {
Yannis Barlas's avatar
Yannis Barlas committed
  const { active, enable, icon, label, onlyOnMain, run, select, title } = item;
chris's avatar
chris committed
  const {
    view: { main },
Yannis Barlas's avatar
Yannis Barlas committed
    activeViewId,
chris's avatar
chris committed
  } = useContext(WaxContext);
Yannis Barlas's avatar
Yannis Barlas committed

  if (onlyOnMain) view = main;

  const { dispatch, state } = view;

Yannis Barlas's avatar
Yannis Barlas committed
  const handleMouseDown = e => {
chris's avatar
chris committed
    e.preventDefault();
Yannis Barlas's avatar
Yannis Barlas committed
    run(state, dispatch);
  };

chris's avatar
chris committed
  const isActive = active && active(state, activeViewId);
Yannis Barlas's avatar
Yannis Barlas committed
  const isDisabled =
chris's avatar
chris committed
    enable && !enable(state) && !(select && select(state, activeViewId));
  return (
Yannis Barlas's avatar
Yannis Barlas committed
    <MenuButton
chris's avatar
chris committed
      active={isActive || false}
Yannis Barlas's avatar
Yannis Barlas committed
      disabled={isDisabled}
      iconName={icon}
      label={label}
Yannis Barlas's avatar
Yannis Barlas committed
      onMouseDown={handleMouseDown}
Yannis Barlas's avatar
Yannis Barlas committed
      title={title}
    />
chris's avatar
chris committed

export default Button;