haerzig.core.views.DropDownView.kt Maven / Gradle / Ivy
package haerzig.core.views
import androidx.compose.foundation.Image
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import haerzig.core.themes.verticalGradient
@Composable
fun DropDownView(modifier: Modifier = Modifier, icon: Painter = painterResource(-1), items: List = ArrayList(), selectedItemsView: @Composable RowScope.() -> Unit, itemsView: @Composable (T) -> Unit, onClick: (T) -> Unit = {}) {
var expanded: Boolean by remember { mutableStateOf(false) }
Column(modifier = modifier) {
Row(
modifier = Modifier
.padding(8.dp)
.align(Alignment.End),
) {
selectedItemsView
Image(
modifier = Modifier
.verticalGradient()
.size(48.dp)
.align(Alignment.CenterVertically)
.clickable { expanded = true },
painter = icon,
contentDescription = "drop down arrow",
)
}
DropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false },
modifier = Modifier.wrapContentHeight()
) {
items.forEachIndexed { index, element ->
DropdownMenuItem(
onClick = {
onClick.invoke(items[index])
expanded = false
},
modifier = Modifier
.align(Alignment.End)
.height(48.dp),
text = { itemsView.invoke(items[index]) }
)
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy