Skip to content
Snippets Groups Projects
LeftSideButton.js 1.51 KiB
Newer Older
chris's avatar
chris committed
/* eslint react/prop-types: 0 */
import React, { useContext, useMemo } from 'react';
import { WaxContext } from 'wax-prosemirror-core';
import styled, { css } from 'styled-components';
chris's avatar
chris committed
import { th, override } from '@pubsweet/ui-toolkit';
chris's avatar
chris committed
import MenuButton from '../../ui/buttons/MenuButton';

const activeStyles = css`
  pointer-events: none;
`;

const StyledButton = styled(MenuButton)`
  ${props => props.active && activeStyles}
`;

const LeftSideButton = ({ view = {}, item }) => {
chris's avatar
chris committed
  const { active, icon, label, run, select, title } = item;
chris's avatar
chris committed

  const {
chris's avatar
chris committed
    pmViews: { main },
chris's avatar
chris committed
    activeViewId,
    activeView,
  } = useContext(WaxContext);

  const isEditable = main.props.editable(editable => {
    return editable;
  });

  const { dispatch, state } = view;

  const handleMouseDown = (e, editorState, editorDispatch) => {
    e.preventDefault();
    run(editorState, dispatch);
  };

chris's avatar
chris committed
  // const isActive = !!(
  //   active(state, activeViewId) && select(state, activeViewId)
  // );

  const isActive = !!active(state, activeViewId);
chris's avatar
chris committed

  let isDisabled = !select(state, activeViewId, activeView);
  if (!isEditable) isDisabled = true;

  const LeftSideButtonComponent = useMemo(
    () => (
      <StyledButton
        active={isActive || false}
        disabled={isDisabled}
        iconName={icon}
        label={label}
        onMouseDown={e => handleMouseDown(e, view.state, view.dispatch)}
        title={title}
      />
    ),
    [isActive, isDisabled],
  );

  return LeftSideButtonComponent;
};

export default LeftSideButton;