in plugin/src/main/kotlin/com/jetbrains/packagesearch/plugin/ui/panels/packages/PackageSearchPackageList.kt [72:129]
fun PackageSearchPackageList(
modifier: Modifier = Modifier,
packagesList: List<PackageListItem>,
isCompact: Boolean,
selectableLazyListState: SelectableLazyListState,
onPackageEvent: (PackageListItemEvent) -> Unit,
) {
var openPopupId by remember { mutableStateOf<PackageListItem.Package.Id?>(null) }
SelectableLazyColumn(
modifier = modifier,
selectionMode = SelectionMode.Single,
state = selectableLazyListState,
onSelectedIndexesChanged = {
val eventId = it.firstOrNull()
?.let { packagesList[it] }
?.id as? PackageListItem.Package.Id
if (eventId != null) {
onPackageEvent(OnPackageSelected(eventId))
}
},
) {
packagesList.forEachIndexed { index, item ->
when (item) {
is PackageListItem.Header -> stickyHeader(key = item.id, contentType = "header") {
PackageListHeader(
additionalContentModifier = Modifier,
content = item,
onEvent = onPackageEvent
)
}
is PackageListItem.Package -> item(key = item.id, contentType = item.contentType()) {
PackageListItem(
modifier = Modifier,
content = item,
packagesList = packagesList,
index = index,
onPackageListItemEvent = onPackageEvent,
isCompact = isCompact,
openPopupId = openPopupId,
onOpenPopupRequest = { openPopupId = it },
onPopupDismissRequest = { openPopupId = null }
)
}
is PackageListItem.SearchError -> item(key = item.id, contentType = item.contentType()) {
SearchErrorItem(
onLinkClick = { onPackageEvent(PackageListItemEvent.OnRetryPackageSearch(item.id)) }
)
}
is PackageListItem.NoPackagesFound -> item(key = item.id, contentType = item.contentType()) {
NoPackagesFoundItem()
}
}
}
}
}