Skip to content

Instantly share code, notes, and snippets.

@kevinmcampos
Created January 28, 2025 14:27
Show Gist options
  • Save kevinmcampos/b248812b0d146f1adad0da9cb3e31dcd to your computer and use it in GitHub Desktop.
Save kevinmcampos/b248812b0d146f1adad0da9cb3e31dcd to your computer and use it in GitHub Desktop.
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import kotlinx.datetime.Clock
internal const val DEFAULT_DEBOUNCE_TIME = 1000L
private class EventProcessor {
private val now: Long
get() = Clock.System.now().toEpochMilliseconds()
private var lastEventTimeMs: Long = 0
fun processEvent(debounceTimeMillis: Long, event: () -> Unit) {
if (debounceTimeMillis <= 0) return event()
if (now - lastEventTimeMs >= debounceTimeMillis) {
event()
lastEventTimeMs = now
}
}
}
@Composable
fun debouncedLambda(debounceTimeMillis: Long = DEFAULT_DEBOUNCE_TIME, onClick: () -> Unit): () -> Unit {
val eventProcessor = remember { EventProcessor() }
return {
eventProcessor.processEvent(debounceTimeMillis) { onClick() }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment