Skip to content
Snippets Groups Projects
EditingSuggestingDropDown.js 2.37 KiB
Newer Older
/* eslint react/prop-types: 0 */
import React, { useMemo, useContext, useEffect } from 'react';
import styled from 'styled-components';
import { WaxContext } from 'wax-prosemirror-core';
import Dropdown from 'react-dropdown';
import 'react-dropdown/style.css';
import Icon from '../../helpers/Icon';
chris's avatar
chris committed
import TrackChangesBox from '../trackChanges/TrackChangesBox';

const DropdownStyled = styled(Dropdown)`
  display: inline-flex;
  opacity: ${props => (props.select ? 1 : 0.4)};

  .Dropdown-control {
    border: none;
    cursor: ${props => (props.select ? 'default' : 'not-allowed')};
    pointer-events: ${props => (props.select ? 'default' : 'none')};
  }

  .Dropdown-arrow {
    right: 25px;
    top: 14px;
  }

  .Dropdown-menu {
    align-items: flex-start;
    display: flex;
    flex-direction: column;
    width: 120%;

    .Dropdown-option {
      width: 100%;
    }
  }
`;

const StyledIcon = styled(Icon)`
  height: 16px;
  margin-right: 5px;
  width: 16px;
`;

const Editing = () => {
  return (
    <span>
      <StyledIcon name="editing" />
      Editing
    </span>
  );
};

const Suggesting = () => {
  return (
    <span>
      <StyledIcon name="suggesting" />
      Suggesting
    </span>
  );
};

const Viewing = () => {
  return (
    <span>
      <StyledIcon name="viewing" />
      Viewing
    </span>
  );
};

const dropDownOptions = [
  { label: <Editing />, value: 'editing' },
  { label: <Suggesting />, value: 'suggesting' },
];

const EditingSuggesting = ({ view: { dispatch, state }, item }) => {
  const { app } = useContext(WaxContext);
  const isDisabled = app.config.get('config.EnableTrackChangeService').toggle;
  const enableDisableTrackChanges = () => {
chris's avatar
chris committed
    app.config.get('config.EnableTrackChangeService').enabled = !app.config.get(
      'config.EnableTrackChangeService',
    ).enabled;
  };

  const selectedOption = () => {
    if (app.config.get('config.EnableTrackChangeService').enabled)
chris's avatar
chris committed
      return dropDownOptions[1];

    return dropDownOptions[0];
  };

  const EditingSuggestingComponent = useMemo(
    () => (
      <DropdownStyled
chris's avatar
chris committed
        onChange={option => {
          return enableDisableTrackChanges();
chris's avatar
chris committed
        }}
        options={dropDownOptions}
        select={isDisabled}
        value={selectedOption()}
  if (app.config.get('readonly')) return <Viewing />;

  return EditingSuggestingComponent;
};

export default EditingSuggesting;