From 28e77be698f66240293a3fbe9915e4c62e73f8d2 Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Wed, 20 Jan 2021 01:17:41 +0200 Subject: [PATCH] use last users selection as starting point --- .../findAndReplace/FindComponent.js | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/wax-prosemirror-components/src/components/findAndReplace/FindComponent.js b/wax-prosemirror-components/src/components/findAndReplace/FindComponent.js index d51b800af..40609c401 100644 --- a/wax-prosemirror-components/src/components/findAndReplace/FindComponent.js +++ b/wax-prosemirror-components/src/components/findAndReplace/FindComponent.js @@ -96,8 +96,10 @@ const Svg = styled.svg.attrs(() => ({ const FindComponent = ({ close, expand, setPreviousSearcValue }) => { const { app, view, activeViewId } = useContext(WaxContext); - const searchRef = useRef(null); + const [lastActiveViewId, setlastActiveViewId] = useState(); + const [lastSelection, setLastSelection] = useState(); + const [searchValue, setSearchValue] = useState(''); const [counterText, setCounterText] = useState('0 of 0'); const [matchCaseSearch, setMatchCaseSearch] = useState(false); @@ -120,6 +122,10 @@ const FindComponent = ({ close, expand, setPreviousSearcValue }) => { }; useEffect(() => { + if (view[activeViewId].state.selection.from !== 0) { + setLastSelection(view[activeViewId].state.selection); + setlastActiveViewId(activeViewId); + } delayedSearch(); if (isFirstRun) { setTimeout(() => { @@ -192,7 +198,6 @@ const FindComponent = ({ close, expand, setPreviousSearcValue }) => { const findNext = () => { const results = getAllResultsByView(); - const currentSelection = view[activeViewId].state.selection; const resultsFrom = {}; each(results, (result, viewId) => { @@ -205,32 +210,36 @@ const FindComponent = ({ close, expand, setPreviousSearcValue }) => { }); }); - const found = closest(currentSelection.from, resultsFrom[activeViewId]); - const position = resultsFrom[activeViewId].indexOf(found); + const found = closest(lastSelection.from, resultsFrom[lastActiveViewId]); + const position = resultsFrom[lastActiveViewId].indexOf(found); const selectionFrom = new TextSelection( - view[activeViewId].state.doc.resolve( - results[activeViewId][position].from, + view[lastActiveViewId].state.doc.resolve( + results[lastActiveViewId][position].from, ), ); const selectionTo = new TextSelection( - view[activeViewId].state.doc.resolve(results[activeViewId][position].to), + view[lastActiveViewId].state.doc.resolve( + results[lastActiveViewId][position].to, + ), ); - view[activeViewId].dispatch( - view[activeViewId].state.tr.setSelection( + view[lastActiveViewId].dispatch( + view[lastActiveViewId].state.tr.setSelection( TextSelection.between(selectionFrom.$anchor, selectionTo.$head), ), ); - view[activeViewId].dispatch(view[activeViewId].state.tr.scrollIntoView()); + view[lastActiveViewId].dispatch( + view[lastActiveViewId].state.tr.scrollIntoView(), + ); }; const findPrevious = () => { const results = getAllResultsByView(); - const currentSelection = view[activeViewId].state.selection; - console.log(results, activeViewId, currentSelection); + const currentSelection = view[lastActiveViewId].state.selection; + console.log(results, lastActiveViewId, currentSelection); }; return ( -- GitLab