1
+ package com.nickoehler.brawlhalla.core.presentation.components
2
+
3
+ import androidx.compose.animation.core.animateFloatAsState
4
+ import androidx.compose.foundation.background
5
+ import androidx.compose.foundation.clickable
6
+ import androidx.compose.foundation.layout.Arrangement
7
+ import androidx.compose.foundation.layout.Box
8
+ import androidx.compose.foundation.layout.ColumnScope
9
+ import androidx.compose.foundation.layout.Row
10
+ import androidx.compose.foundation.layout.fillMaxWidth
11
+ import androidx.compose.foundation.layout.padding
12
+ import androidx.compose.foundation.shape.CircleShape
13
+ import androidx.compose.material.icons.Icons
14
+ import androidx.compose.material.icons.filled.KeyboardArrowDown
15
+ import androidx.compose.material.icons.filled.Mode
16
+ import androidx.compose.material3.DropdownMenu
17
+ import androidx.compose.material3.Icon
18
+ import androidx.compose.material3.IconButton
19
+ import androidx.compose.material3.MaterialTheme
20
+ import androidx.compose.material3.Surface
21
+ import androidx.compose.material3.Text
22
+ import androidx.compose.runtime.Composable
23
+ import androidx.compose.runtime.getValue
24
+ import androidx.compose.ui.Alignment
25
+ import androidx.compose.ui.Modifier
26
+ import androidx.compose.ui.draw.clip
27
+ import androidx.compose.ui.draw.rotate
28
+ import androidx.compose.ui.graphics.vector.ImageVector
29
+ import androidx.compose.ui.tooling.preview.Preview
30
+ import androidx.compose.ui.unit.dp
31
+ import com.nickoehler.brawlhalla.ui.theme.BrawlhallaTheme
32
+
33
+ @Composable
34
+ fun CustomSortDropDownMenu (
35
+ modifier : Modifier = Modifier ,
36
+ reversed : Boolean ,
37
+ expanded : Boolean ,
38
+ icon : ImageVector ,
39
+ onSortClick : () -> Unit ,
40
+ onReversedClick : () -> Unit ,
41
+ selected : @Composable () -> Unit ,
42
+ content : @Composable (ColumnScope .() -> Unit ),
43
+ ) {
44
+ val rotation by animateFloatAsState(if (reversed) 180f else 0f )
45
+
46
+ Box (
47
+ modifier = modifier,
48
+ ) {
49
+ Row (
50
+ modifier = Modifier .fillMaxWidth(),
51
+ horizontalArrangement = Arrangement .SpaceBetween ,
52
+ verticalAlignment = Alignment .CenterVertically
53
+ ) {
54
+ Row (
55
+ modifier = Modifier
56
+ .clip(CircleShape )
57
+ .clickable { onSortClick() }
58
+ .background(MaterialTheme .colorScheme.surfaceContainer)
59
+ .padding(16 .dp),
60
+ horizontalArrangement = Arrangement .spacedBy(8 .dp),
61
+ verticalAlignment = Alignment .CenterVertically
62
+ ) {
63
+ Icon (icon, null )
64
+ selected()
65
+ }
66
+ IconButton (
67
+ onReversedClick,
68
+ modifier = Modifier
69
+ .clip(CircleShape )
70
+ .background(MaterialTheme .colorScheme.surfaceContainer)
71
+ ) {
72
+ Icon (
73
+ Icons .Default .KeyboardArrowDown ,
74
+ null ,
75
+ modifier = Modifier
76
+ .rotate(rotation)
77
+ )
78
+ }
79
+ }
80
+ DropdownMenu (
81
+ expanded = expanded,
82
+ onDismissRequest = { onSortClick() }
83
+ ) {
84
+ content()
85
+ }
86
+ }
87
+ }
88
+
89
+ @Preview
90
+ @Composable
91
+ private fun CustomSortDropDownMenuPreview () {
92
+ BrawlhallaTheme {
93
+ Surface {
94
+ CustomSortDropDownMenu (
95
+ reversed = true ,
96
+ expanded = true ,
97
+ icon = Icons .Default .Mode ,
98
+ selected = {
99
+ Text (" test" )
100
+ },
101
+ onSortClick = {},
102
+ onReversedClick = {},
103
+ ) {
104
+ Text (" test" )
105
+ }
106
+ }
107
+ }
108
+ }
0 commit comments