Skip to content

Commit

Permalink
✨ :: Create clickableSingle Modifier Function
Browse files Browse the repository at this point in the history
  • Loading branch information
audgns10 committed Aug 19, 2024
1 parent dffdde8 commit 59c952d
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.msg.design_system.component.modifier.clickableSingle

internal interface MultipleEventsCutter {
fun processEvent(event: () -> Unit)

companion object
}

internal fun MultipleEventsCutter.Companion.get(): MultipleEventsCutter = MultipleEventsCutterImpl()

private class MultipleEventsCutterImpl : MultipleEventsCutter {
private var lastEventTimeMs: Long = 0

override fun processEvent(event: () -> Unit) {
val now = System.currentTimeMillis()
if (now - lastEventTimeMs >= 400L) {
event.invoke()
lastEventTimeMs = now
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.msg.design_system.component.modifier.clickableSingle

import android.annotation.SuppressLint
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.runtime.Stable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed

@SuppressLint("ModifierFactoryUnreferencedReceiver")
@Stable
fun Modifier.clickableSingle(
enabled: Boolean = true,
onClick: () -> Unit,
) = composed {
val multipleEventsCutter = remember { MultipleEventsCutter.get() }
Modifier.clickable(
enabled = enabled,
onClick = { multipleEventsCutter.processEvent { onClick() } },
indication = null,
interactionSource = remember { MutableInteractionSource() }
)
}

0 comments on commit 59c952d

Please sign in to comment.