fun PackageSearchPackageList()

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()
                }
            }
        }
    }
}