fun PackageListHeader()

in plugin/src/main/kotlin/com/jetbrains/packagesearch/plugin/ui/panels/packages/items/PackageGroupHeader.kt [44:156]


fun PackageListHeader(
    additionalContentModifier: Modifier = Modifier,
    content: PackageListItem.Header,
    onEvent: (PackageListItemEvent) -> Unit,
) {
    val isDarkTheme = JewelTheme.isDark
    val backgroundColor = remember(isDarkTheme) {
        PackageSearchColors.Backgrounds.packageItemHeader()
    }

    Row(
        modifier = Modifier
            .fillMaxWidth()
            .background(backgroundColor)
            .padding(start = 8.dp, end = 16.dp)
            .height(28.dp),
        horizontalArrangement = SpaceBetween,
        verticalAlignment = Alignment.CenterVertically,
    ) {
        Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
            Row(
                modifier = Modifier.onClick(enabled = content.state != State.LOADING) {
                    onEvent(
                        PackageListItemEvent.SetHeaderState(
                            content.id, when (content.state) {
                                State.OPEN -> PackageListItemEvent.SetHeaderState.TargetState.CLOSE
                                else -> PackageListItemEvent.SetHeaderState.TargetState.OPEN
                            }
                        )
                    )
                }
                    .pointerHoverIcon(PointerIcon(Cursor(Cursor.HAND_CURSOR))),
                horizontalArrangement = Arrangement.spacedBy(8.dp)
            ) {
                when (content.state) {
                    State.OPEN -> Icon(
                        resource = "general/chevron-down.svg",
                        tint = Color.Gray,
                        contentDescription = null,
                        iconClass = AllIcons::class.java
                    )

                    State.CLOSED -> Icon(
                        resource = "general/chevron-right.svg",
                        tint = Color.Gray,
                        contentDescription = null,
                        iconClass = AllIcons::class.java
                    )

                    State.LOADING -> CircularProgressIndicator()
                }

                Text(
                    fontWeight = FontWeight.ExtraBold,
                    text = content.title,
                    maxLines = 1
                )
            }
            if (content.attributes.isNotEmpty()) {
                var attributeTextColor by remember { mutableStateOf(Color.Unspecified) }
                val linkTextColor = JewelTheme.linkStyle.colors.content
                Box(
                    modifier = Modifier
                        .onClick {
                            val event =
                                when (content.id) {
                                    is PackageListItem.Header.Id.Declared.Base, is PackageListItem.Header.Id.Remote.Base -> return@onClick
                                    is PackageListItem.Header.Id.Remote.WithVariant -> PackageListItemEvent.InfoPanelEvent.OnHeaderAttributesClick.SearchHeaderWithVariantsAttributesClick(
                                        eventId = content.id,
                                        attributesNames = content.attributes
                                    )
                                    is PackageListItem.Header.Id.Declared.WithVariant -> PackageListItemEvent.InfoPanelEvent.OnHeaderAttributesClick.DeclaredHeaderAttributesClick(
                                        eventId = content.id,
                                        variantName = content.title,
                                    )
                                }
                            onEvent(event)
                        }
                        .onHover {
                            attributeTextColor = if (it) linkTextColor else Color.Unspecified
                        }
                        .pointerHoverIcon(PointerIcon(Cursor(Cursor.HAND_CURSOR))),
                    contentAlignment = Alignment.Center,
                ) {
                    Text(
                        text = content.attributes.joinToString(" "),
                        color = attributeTextColor,
                        maxLines = 1
                    )
                }
            }
        }
        if (content.additionalContent != null) {
            Box(
                modifier = additionalContentModifier,
            ) {

                when (content.additionalContent) {
                    is PackageListItem.Header.AdditionalContent.VariantsText ->
                        LabelInfo(
                            text = content.additionalContent.text,
                            maxLines = 1
                        )

                    is PackageListItem.Header.AdditionalContent.UpdatesAvailableCount ->
                        UpdateAllLink(content.additionalContent, content, onEvent)

                    PackageListItem.Header.AdditionalContent.Loading -> CircularProgressIndicator()
                }
            }
        }
    }
}