diff --git a/wax-prosemirror-components/src/components/trackChanges/TrackChangeBox.js b/wax-prosemirror-components/src/components/trackChanges/TrackChangeBox.js deleted file mode 100644 index 4001c5e04898f5b5919f5f50134f6e597a3e80f0..0000000000000000000000000000000000000000 --- a/wax-prosemirror-components/src/components/trackChanges/TrackChangeBox.js +++ /dev/null @@ -1,77 +0,0 @@ -/* eslint react/prop-types: 0 */ -import { Mark } from 'prosemirror-model'; -import React, { useState, useEffect, useContext } from 'react'; -import { Transition } from 'react-transition-group'; -import styled from 'styled-components'; -import { WaxContext } from 'wax-prosemirror-core'; - -const TrackChangeBoxStyled = styled.div` - display: flex; - flex-direction: column; - margin-top: 10px; - border: 1px solid blue; - position: absolute; - transition: ${({ state }) => 'top 1s, opacity 1.5s, left 1s'}; - top: ${props => (props.top ? `${props.top}px` : 0)}; - left: ${props => (props.active ? `${63}%` : `${65}%`)}; - max-width: 450px; - opacity: ${({ state }) => { - switch (state) { - case 'exited': - return 0.2; - case 'exiting': - return 0.4; - case 'entering': - return 0.6; - case 'entered': - return 1; - default: - } - }}; -`; - -export default ({ trackChange, view, top, dataBox }) => { - const [animate, setAnimate] = useState(false); - const { - view: { main }, - app, - activeView, - } = useContext(WaxContext); - let action; - if (trackChange instanceof Mark) { - if ((trackChange.type.name = 'format_change')) { - const { - attrs: { username, before, after }, - } = trackChange; - action = `User ${username} added ${after[0]}`; - } - } else { - action = `User demo changed paragraph to heading 1`; - } - - let active = false; - useEffect(() => { - setAnimate(true); - }, []); - - return ( - <> - <Transition in={animate} timeout={1000}> - {state => ( - <TrackChangeBoxStyled - top={top} - state={state} - data-box={dataBox} - active={active} - > - <div> - {action} - <button>Accept</button> - <button>Reject</button> - </div> - </TrackChangeBoxStyled> - )} - </Transition> - </> - ); -}; diff --git a/wax-prosemirror-components/src/components/trackChanges/TrackChangeOptionsComponent.js b/wax-prosemirror-components/src/components/trackChanges/TrackChangeOptionsComponent.js new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/wax-prosemirror-components/src/components/trackChanges/TrackChangeOptionsTool.js b/wax-prosemirror-components/src/components/trackChanges/TrackChangeOptionsTool.js new file mode 100644 index 0000000000000000000000000000000000000000..c6e51b45a24d26605b0d6eb8487c67ff318dbef7 --- /dev/null +++ b/wax-prosemirror-components/src/components/trackChanges/TrackChangeOptionsTool.js @@ -0,0 +1,60 @@ +import React, { useMemo, useState, useRef } from 'react'; + +import styled from 'styled-components'; +import { grid } from '@pubsweet/ui-toolkit'; + +import MenuButton from '../../ui/buttons/MenuButton'; +import TrackChangeOptionsComponent from './TrackChangeOptionsComponent'; +import useOnClickOutside from '../../helpers/useOnClickOutside'; + +const Wrapper = styled.div` + font-size: 0; + position: relative; + z-index: 2; +`; + +const DropWrapper = styled.div` + background: white; + margin-top: ${grid(1)}; + position: absolute; + top: 32px; +`; + +const TrackChangeOptionsTool = ({ view = {}, item }) => { + const { icon, title } = item; + const [isOpen, setIsOpen] = useState(false); + const ref = useRef(); + + useOnClickOutside(ref, () => setIsOpen(false)); + + const MemorizedDropdown = useMemo( + () => ( + <Wrapper ref={ref}> + <MenuButton + active={isOpen} + disabled={false} + iconName={icon} + onMouseDown={() => { + setIsOpen(!isOpen); + }} + title={title} + /> + + {isOpen && ( + <DropWrapper> + <TrackChangeOptionsComponent + close={() => { + setIsOpen(false); + }} + /> + </DropWrapper> + )} + </Wrapper> + ), + [isOpen], + ); + + return MemorizedDropdown; +}; + +export default TrackChangeOptionsTool;