Skip to content

Commit 0ca94b0

Browse files
committed
Add debounce
1 parent f54ed90 commit 0ca94b0

File tree

1 file changed

+23
-17
lines changed

1 file changed

+23
-17
lines changed

scaladoc-js/src/searchbar/SearchbarComponent.scala

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package dotty.tools.scaladoc
22

33
import org.scalajs.dom._
44
import org.scalajs.dom.html.Input
5+
import scala.scalajs.js.timers._
6+
import scala.concurrent.duration._
57

68
class SearchbarComponent(engine: SearchbarEngine, inkuireEngine: InkuireDelegateSearchEngine, parser: QueryParser):
79
val resultsChunkSize = 100
@@ -36,28 +38,32 @@ class SearchbarComponent(engine: SearchbarEngine, inkuireEngine: InkuireDelegate
3638
resultsDiv.appendChild(fragment)
3739
def loadMoreResults(result: List[raw.HTMLElement]): Unit = {
3840
resultsDiv.onscroll = (event: Event) => {
39-
if (resultsDiv.scrollHeight - resultsDiv.scrollTop == resultsDiv.clientHeight)
40-
{
41-
val fragment = document.createDocumentFragment()
42-
result.take(resultsChunkSize).foreach(fragment.appendChild)
43-
resultsDiv.appendChild(fragment)
44-
loadMoreResults(result.drop(resultsChunkSize))
45-
}
41+
if (resultsDiv.scrollHeight - resultsDiv.scrollTop == resultsDiv.clientHeight) {
42+
val fragment = document.createDocumentFragment()
43+
result.take(resultsChunkSize).foreach(fragment.appendChild)
44+
resultsDiv.appendChild(fragment)
45+
loadMoreResults(result.drop(resultsChunkSize))
46+
}
4647
}
4748
}
4849
loadMoreResults(result.drop(resultsChunkSize))
4950

51+
var timeoutHandle: SetTimeoutHandle = null
5052
def handleNewQuery(query: String) =
51-
resultsDiv.scrollTop = 0
52-
while (resultsDiv.hasChildNodes()) resultsDiv.removeChild(resultsDiv.lastChild)
53-
val fragment = document.createDocumentFragment()
54-
parser.parse(query) match {
55-
case EngineMatchersQuery(matchers) =>
56-
handleNewFluffQuery(matchers)
57-
case BySignature(signature) =>
58-
inkuireEngine.query(query) { (p: PageEntry) =>
59-
resultsDiv.appendChild(p.toHTML)
60-
}
53+
clearTimeout(timeoutHandle)
54+
timeoutHandle = setTimeout(1.second) {
55+
resultsDiv.scrollTop = 0
56+
while (resultsDiv.hasChildNodes()) resultsDiv.removeChild(resultsDiv.lastChild)
57+
val fragment = document.createDocumentFragment()
58+
parser.parse(query) match {
59+
case EngineMatchersQuery(matchers) =>
60+
handleNewFluffQuery(matchers)
61+
case BySignature(signature) =>
62+
println("Searching")
63+
inkuireEngine.query(query) { (p: PageEntry) =>
64+
resultsDiv.appendChild(p.toHTML)
65+
}
66+
}
6167
}
6268

6369
private val searchIcon: html.Div =

0 commit comments

Comments
 (0)