From f932b07bce305348415466a4db420c8345a2d7a4 Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Mon, 19 Oct 2020 14:28:10 +0300 Subject: [PATCH] use debounce to delay search --- .../findAndReplace/FindComponent.js | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/wax-prosemirror-components/src/components/findAndReplace/FindComponent.js b/wax-prosemirror-components/src/components/findAndReplace/FindComponent.js index 19e6c4407..d647f05df 100644 --- a/wax-prosemirror-components/src/components/findAndReplace/FindComponent.js +++ b/wax-prosemirror-components/src/components/findAndReplace/FindComponent.js @@ -1,7 +1,13 @@ /* eslint react/prop-types: 0 */ -import React, { useState, useRef, useContext } from 'react'; -import { Decoration, DecorationSet } from 'prosemirror-view'; +import React, { + useState, + useRef, + useContext, + useCallback, + useEffect, +} from 'react'; +import { debounce } from 'lodash'; import styled from 'styled-components'; import { grid, th } from '@pubsweet/ui-toolkit'; import { WaxContext } from 'wax-prosemirror-core'; @@ -78,13 +84,22 @@ const FindComponent = ({ close, expand }) => { const searchRef = useRef(null); const [searchValue, setsearchValue] = useState(''); const [counterText, setCounterText] = useState('0 of 0'); + + const delayedSearch = useCallback( + debounce(() => searchDocument(), 300), + [searchValue], + ); + const findAndReplacePlugin = app.PmPlugins.get('findAndReplacePlugin'); const onChange = () => { setsearchValue(searchRef.current.value); - searchDocument(); }; + useEffect(() => { + delayedSearch(); + }, [searchValue, delayedSearch]); + const searchDocument = () => { setCounterText('0 of 0'); const results = []; @@ -110,7 +125,7 @@ const FindComponent = ({ close, expand }) => { }); mergedTextNodes.forEach(({ text, pos }) => { - const search = RegExp(searchRef.current.value, 'gui'); + const search = RegExp(searchValue, 'gui'); let m; // eslint-disable-next-line no-cond-assign while ((m = search.exec(text))) { @@ -128,9 +143,9 @@ const FindComponent = ({ close, expand }) => { if (results.length > 0) { setCounterText(`1 of ${results.length}`); - tr.setMeta('search', true); - main.dispatch(tr); } + tr.setMeta('search', true); + main.dispatch(tr); }; const closeFind = () => { -- GitLab