Skip to content
Snippets Groups Projects
Button.js 1.2 KiB
Newer Older
chris's avatar
chris committed
import React, { useContext } from 'react';
import styled from 'styled-components';
import { ButtonStyles } from 'wax-prosemirror-themes';
import { WaxContext } from 'wax-prosemirror-core';
chris's avatar
chris committed

const ButtonStyled = styled.button`
  ${ButtonStyles};
chris's avatar
chris committed
  opacity: ${props => (props.select ? 1 : 0.4)};
chris's avatar
chris committed
  pointer-events: ${props => (props.select ? 'default' : 'none')};
  color: ${props => (props.isActive ? 'white' : props.theme.colorButton)};
  background-color: ${props =>
chris's avatar
chris committed
    props.isActive ? props.theme.colorPrimary : 'transparent'};
chris's avatar
chris committed
  &:hover {
chris's avatar
chris committed
    background-color: ${props =>
chris's avatar
chris committed
      props.isActive ? props.theme.colorPrimary : 'transparent'};
chris's avatar
chris committed
  }
`;

const Button = ({ view = {}, item }) => {
  if (item.onlyOnMain) {
chris's avatar
chris committed
    const {
      view: { main },
    } = useContext(WaxContext);
  return (
    <ButtonStyled
      type="button"
      isActive={item.active && item.active(view.state)}
      title={item.title}
      disabled={item.enable && !item.enable(view.state)}
      onMouseDown={e => {
        e.preventDefault();
        item.run(view.state, view.dispatch);
      }}
      select={item.select && item.select(view.state)}
    >
      {item.content}
    </ButtonStyled>
  );
};
chris's avatar
chris committed

export default Button;