fun LicensesScreen()

in shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/LicenseScreens.kt [78:164]


fun LicensesScreen(
    onLicenseClick: (licenseName: String, licenseText: String) -> Unit,
    onBack: () -> Unit,
    viewModel: LicensesViewModel = koinViewModel(),
) {
    var searchState by rememberSaveable { mutableStateOf(MainHeaderContainerState.Title) }
    var searchText by rememberSaveable { mutableStateOf("") }

    val libraries = viewModel.licensesState.collectAsStateWithLifecycle().value
    val listState = rememberLazyListState()

    LaunchedEffect(searchState, searchText) {
        if (searchState == MainHeaderContainerState.Search) {
            if (listState.firstVisibleItemIndex > 1) {
                listState.scrollToItem(0)
            } else {
                listState.animateScrollToItem(0)
            }
        }
        viewModel.setSearchText(searchText)
    }

    Column(
        modifier = Modifier
            .fillMaxSize()
            .background(color = KotlinConfTheme.colors.mainBackground)
            .padding(topInsetPadding())
    ) {
        MainHeaderContainer(
            state = searchState,
            titleContent = {
                MainHeaderTitleBar(
                    title = stringResource(Res.string.licenses_title),
                    startContent = {
                        TopMenuButton(
                            icon = UiRes.drawable.arrow_left_24,
                            contentDescription = stringResource(UiRes.string.main_header_back),
                            onClick = onBack,
                        )
                    },
                    endContent = {
                        TopMenuButton(
                            icon = UiRes.drawable.search_24,
                            onClick = { searchState = MainHeaderContainerState.Search },
                            contentDescription = stringResource(UiRes.string.main_header_search_hint)
                        )
                    }
                )
            },
            searchContent = {
                NavigationBackHandler(
                    state = rememberNavigationEventState(NavigationEventInfo.None),
                    isBackEnabled = true,
                    onBackCompleted = {
                        searchState = MainHeaderContainerState.Title
                        searchText = ""
                    },
                )

                MainHeaderSearchBar(
                    searchValue = searchText,
                    onSearchValueChange = { searchText = it },
                    onClose = {
                        searchState = MainHeaderContainerState.Title
                        searchText = ""
                    },
                    onClear = { searchText = "" },
                )
            }
        )

        Divider(1.dp, KotlinConfTheme.colors.strokePale)

        LibraryList(
            libraries = libraries,
            isSearch = searchState == MainHeaderContainerState.Search,
            onLicenseClick = { library ->
                onLicenseClick(library.licenseName, library.licenseContent)
            },
            listState = listState,
            modifier = Modifier
                .fillMaxSize()
                .padding(PaddingValues(horizontal = 12.dp))
                .clipToBounds(),
        )
    }
}