Newer
Older
import React, { useContext, useMemo, useState, useEffect } from 'react';
import { WaxContext, DocumentHelpers } from 'wax-prosemirror-core';
import { last, maxBy } from 'lodash';
import { TextSelection } from 'prosemirror-state';
import TrackChangesBox from './ui/trackChanges/TrackChangesBox';
import acceptTrackChange from './ui/trackChanges/AcceptTrackChange';
import rejectTrackChange from './ui/trackChanges/RejectTrackChange';
const ConnectedTrackChangeStyled = styled.div`
margin-left: ${props => (props.active ? `${-20}px` : `${50}px`)};
export default ({ trackChangeId, top, recalculateTops, trackChange }) => {
const [isActive, setIsActive] = useState(false);
const viewId = trackChange.attrs
? trackChange.attrs.viewid
: trackChange.node.attrs.viewid;
const trakChangePlugin = app.PmPlugins.get('trackChangePlugin');
const activeTrackChange = trakChangePlugin.getState(activeView.state)
.trackChange;
const onClickBox = trackData => {
const allTracksWithSameId = DocumentHelpers.findAllMarksWithSameId(
trackData,
);
const maxPos = maxBy(allTracksWithSameId, 'pos');
maxPos.pos += last(allTracksWithSameId).node.nodeSize;
pmViews[viewId].dispatch(
pmViews[viewId].state.tr.setSelection(
new TextSelection(pmViews[viewId].state.tr.doc.resolve(maxPos.pos - 1)),
pmViews[viewId].dispatch(
pmViews[viewId].state.tr.setSelection(
new TextSelection(
pmViews[viewId].state.tr.doc.resolve(trackData.pos + 1),
),
useEffect(() => {
setIsActive(false);
if (activeTrackChange && trackChangeId === activeTrackChange.attrs.id) {
setIsActive(true);
}
}, [activeTrackChange]);
const acceptConfig = app.config.get('config.AcceptTrackChangeService');
acceptTrackChange(
dispatch,
user,
activeTrackChange,
acceptConfig,
context,
trackChange,
);
const rejectConfig = app.config.get('config.RejectTrackChangeService');
rejectTrackChange(
dispatch,
user,
activeTrackChange,
rejectConfig,
context,
trackChange,
);
const MemorizedTrackChange = useMemo(
() => (
<ConnectedTrackChangeStyled
data-box={trackChangeId}
style={styles}
>
<TrackChangesBox
onClickBox={onClickBox}
trackChangeId={trackChangeId}