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