diff --git a/wax-prosemirror-components/src/components/comments/ConnectedComment.js b/wax-prosemirror-components/src/components/comments/ConnectedComment.js index 7360c85b9be17eefd8830c1a1cc172448d6cd860..0bdb76e3f2bf5c39252039d34edcc48851943b12 100644 --- a/wax-prosemirror-components/src/components/comments/ConnectedComment.js +++ b/wax-prosemirror-components/src/components/comments/ConnectedComment.js @@ -1,5 +1,5 @@ /* eslint react/prop-types: 0 */ -import React, { useContext, useMemo } from 'react'; +import React, { useContext, useMemo, useState, useEffect } from 'react'; import { TextSelection } from 'prosemirror-state'; import { last, maxBy } from 'lodash'; import styled from 'styled-components'; @@ -8,8 +8,8 @@ import { WaxContext } from 'wax-prosemirror-core'; import CommentBox from '../../ui/comments/CommentBox'; const ConnectedCommentStyled = styled.div` - position: absolute; margin-left: ${props => (props.active ? `${-20}px` : `${50}px`)}; + position: absolute; width: 200px; @media (max-width: 600px) { margin-left: 15px; @@ -28,6 +28,7 @@ export default ({ comment, top, commentId, recalculateTops }) => { activeView, } = useContext(WaxContext); + const [isActive, setIsActive] = useState(false); const { state, dispatch } = activeView; const viewId = comment.attrs.viewid; let allCommentsWithSameId = []; @@ -41,8 +42,6 @@ export default ({ comment, top, commentId, recalculateTops }) => { const commentMark = state.schema.marks.comment; - let active = false; - const styles = { top: `${top}px`, }; @@ -50,10 +49,13 @@ export default ({ comment, top, commentId, recalculateTops }) => { const commentPlugin = app.PmPlugins.get('commentPlugin'); const activeComment = commentPlugin.getState(activeView.state).comment; - if (activeComment && commentId === activeComment.attrs.id) { - active = true; - recalculateTops(); - } + useEffect(() => { + setIsActive(false); + if (activeComment && commentId === activeComment.attrs.id) { + setIsActive(true); + recalculateTops(); + } + }, [activeComment]); const onClickPost = content => { const { tr } = state; @@ -83,7 +85,7 @@ export default ({ comment, top, commentId, recalculateTops }) => { }; const onClickBox = () => { - if (active) { + if (isActive) { view[viewId].focus(); return false; } @@ -133,30 +135,30 @@ export default ({ comment, top, commentId, recalculateTops }) => { onClickResolve(); activeView.focus(); } - }, 200); + }, 500); }; const MemorizedComponent = useMemo( () => ( <ConnectedCommentStyled + active={isActive} data-box={commentId} style={styles} - active={active} > <CommentBox - key={commentId} - active={active} - commentId={commentId} + active={isActive} commentData={comment.attrs.conversation} - onClickPost={onClickPost} + commentId={commentId} + key={commentId} onClickBox={onClickBox} + onClickPost={onClickPost} onClickResolve={onClickResolve} - recalculateTops={recalculateTops} onTextAreaBlur={onTextAreaBlur} + recalculateTops={recalculateTops} /> </ConnectedCommentStyled> ), - [active, top, comment.attrs.conversation.length], + [isActive, top, comment.attrs.conversation.length], ); return <>{MemorizedComponent}</>; }; diff --git a/wax-prosemirror-components/src/components/trackChanges/ConnectedTrackChange.js b/wax-prosemirror-components/src/components/trackChanges/ConnectedTrackChange.js index eebeca8bf6ba92335afa183e3547f5978036f990..23f2204de132da55b52ff18eb83084680d29e5b4 100644 --- a/wax-prosemirror-components/src/components/trackChanges/ConnectedTrackChange.js +++ b/wax-prosemirror-components/src/components/trackChanges/ConnectedTrackChange.js @@ -1,35 +1,27 @@ /* eslint react/prop-types: 0 */ -import React, { useContext, useMemo } from 'react'; +import React, { useContext, useMemo, useState, useEffect } from 'react'; import styled from 'styled-components'; -import { DocumentHelpers } from 'wax-prosemirror-utilities'; +// import { DocumentHelpers } from 'wax-prosemirror-utilities'; import { WaxContext } from 'wax-prosemirror-core'; import TrackChangesBox from '../../ui/trackChanges/TrackChangesBox'; const ConnectedTrackChangeStyled = styled.div` - position: absolute; + background: red; + height: 200px; margin-left: ${props => (props.active ? `${-20}px` : `${50}px`)}; + position: absolute; width: 200px; - height: 200px; - background: red; @media (max-width: 600px) { margin-left: 15px; } `; export default ({ trackChangeId, top, recalculateTops }) => { - const { - view, - view: { - main: { - props: { user }, - }, - }, - app, - activeView, - } = useContext(WaxContext); + const { app, activeView } = useContext(WaxContext); + + const [isActive, setIsActive] = useState(false); + // const { state, dispatch } = activeView; - const { state, dispatch } = activeView; - let active = false; const styles = { top: `${top}px`, }; @@ -38,28 +30,31 @@ export default ({ trackChangeId, top, recalculateTops }) => { const activeTrackChange = trakChangePlugin.getState(activeView.state) .trackChange; - if (activeTrackChange && trackChangeId === activeTrackChange.attrs.id) { - active = true; - recalculateTops(); - } + useEffect(() => { + setIsActive(false); + if (activeTrackChange && trackChangeId === activeTrackChange.attrs.id) { + setIsActive(true); + recalculateTops(); + } + }, [activeTrackChange]); const MemorizedTrackChange = useMemo( () => ( <ConnectedTrackChangeStyled + active={isActive} data-box={trackChangeId} style={styles} - active={active} > <TrackChangesBox + active={isActive} key={trackChangeId} - active={active} - trackChangeId={trackChangeId} - commentData="" recalculateTops={recalculateTops} + trackChangeId={trackChangeId} + trackData="" /> </ConnectedTrackChangeStyled> ), - [active, top], + [isActive, top], ); return <>{MemorizedTrackChange}</>; };