@@ -13,21 +13,27 @@ import androidx.compose.material3.ButtonDefaults
13
13
import androidx.compose.material3.Text
14
14
import androidx.compose.runtime.Composable
15
15
import androidx.compose.runtime.getValue
16
+ import androidx.compose.runtime.mutableStateOf
16
17
import androidx.compose.runtime.remember
18
+ import androidx.compose.runtime.rememberCoroutineScope
19
+ import androidx.compose.runtime.setValue
17
20
import androidx.compose.ui.Modifier
18
21
import androidx.compose.ui.graphics.Color
19
22
import androidx.compose.ui.graphics.Shape
20
23
import androidx.compose.ui.tooling.preview.Preview
21
24
import androidx.compose.ui.unit.Dp
22
25
import androidx.compose.ui.unit.dp
23
26
import com.yapp.designsystem.theme.OrbitTheme
27
+ import kotlinx.coroutines.delay
28
+ import kotlinx.coroutines.launch
24
29
25
30
@Composable
26
31
fun OrbitButton (
27
32
label : String ,
28
33
modifier : Modifier = Modifier ,
29
34
onClick : () -> Unit ,
30
35
enabled : Boolean = false,
36
+ debounceTime : Long = 500L,
31
37
height : Dp = 54.dp,
32
38
containerColor : Color = OrbitTheme .colors.main,
33
39
contentColor : Color = OrbitTheme .colors.gray_900,
@@ -39,15 +45,28 @@ fun OrbitButton(
39
45
) {
40
46
val interactionSource = remember { MutableInteractionSource () }
41
47
val isPressed = interactionSource.collectIsPressedAsState().value
48
+ val coroutineScope = rememberCoroutineScope()
49
+ var isClickable by remember { mutableStateOf(true ) }
42
50
43
51
val padding by animateDpAsState(
44
52
targetValue = if (isPressed) 2 .dp else 0 .dp,
45
53
animationSpec = tween(durationMillis = 100 ),
46
54
label = " PaddingAnimation" ,
47
55
)
48
56
57
+ fun handleClick () {
58
+ if (isClickable) {
59
+ isClickable = false
60
+ onClick()
61
+ coroutineScope.launch {
62
+ delay(debounceTime)
63
+ isClickable = true
64
+ }
65
+ }
66
+ }
67
+
49
68
Button (
50
- onClick = onClick ,
69
+ onClick = ::handleClick ,
51
70
enabled = enabled,
52
71
shape = shape,
53
72
colors = ButtonDefaults .buttonColors(
0 commit comments