All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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