diff --git a/src/main/kotlin/org/jetbrains/plugins/template/toolWindow/MyToolWindowFactory.kt b/src/main/kotlin/org/jetbrains/plugins/template/toolWindow/MyToolWindowFactory.kt index e45a92b..b0fe66f 100644 --- a/src/main/kotlin/org/jetbrains/plugins/template/toolWindow/MyToolWindowFactory.kt +++ b/src/main/kotlin/org/jetbrains/plugins/template/toolWindow/MyToolWindowFactory.kt @@ -1,17 +1,28 @@ package org.jetbrains.plugins.template.toolWindow +import com.intellij.openapi.components.service import com.intellij.openapi.project.DumbAware import com.intellij.openapi.project.Project import com.intellij.openapi.wm.ToolWindow import com.intellij.openapi.wm.ToolWindowFactory import org.jetbrains.jewel.bridge.addComposeTab import org.jetbrains.plugins.template.ui.ChatAppSample +import org.jetbrains.plugins.template.weatherApp.services.LocationsProvider +import org.jetbrains.plugins.template.weatherApp.services.MyLocationsViewModel import org.jetbrains.plugins.template.weatherApp.ui.WeatherAppSample class MyToolWindowFactory : ToolWindowFactory, DumbAware { override fun createToolWindowContent(project: Project, toolWindow: ToolWindow) { - toolWindow.addComposeTab("Weather App") { WeatherAppSample() } + toolWindow.addComposeTab("Weather App") { + val viewModel = service() + val locationProviderApi = service() + WeatherAppSample( + viewModel, + viewModel, + locationProviderApi + ) + } toolWindow.addComposeTab("Chat App") { ChatAppSample() } } diff --git a/src/main/kotlin/org/jetbrains/plugins/template/weatherApp/ui/WeatherAppSample.kt b/src/main/kotlin/org/jetbrains/plugins/template/weatherApp/ui/WeatherAppSample.kt index 6161758..364726d 100644 --- a/src/main/kotlin/org/jetbrains/plugins/template/weatherApp/ui/WeatherAppSample.kt +++ b/src/main/kotlin/org/jetbrains/plugins/template/weatherApp/ui/WeatherAppSample.kt @@ -3,13 +3,13 @@ package org.jetbrains.plugins.template.weatherApp.ui import androidx.compose.foundation.background import androidx.compose.foundation.layout.* import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color.Companion.Transparent import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp -import com.intellij.openapi.components.service import org.jetbrains.jewel.bridge.retrieveColorOrUnspecified import org.jetbrains.jewel.foundation.lazy.SelectableLazyColumn import org.jetbrains.jewel.foundation.lazy.SelectionMode @@ -24,16 +24,17 @@ import org.jetbrains.plugins.template.weatherApp.ui.components.SearchToolbarMenu import org.jetbrains.plugins.template.weatherApp.ui.components.WeatherDetailsCard @Composable -internal fun WeatherAppSample() { - val viewModel: MyLocationsViewModel = service() - val searchAutoCompletionItemProvided = service() - +internal fun WeatherAppSample( + myLocationViewModel: MyLocationsViewModelApi, + weatherViewModelApi: WeatherViewModelApi, + searchAutoCompletionItemProvided: LocationsProvider +) { HorizontalSplitLayout( - first = { LeftColumn(viewModel, modifier = Modifier.fillMaxSize()) }, + first = { LeftColumn(myLocationViewModel, modifier = Modifier.fillMaxSize()) }, second = { RightColumn( - viewModel, - viewModel, + myLocationViewModel, + weatherViewModelApi, searchAutoCompletionItemProvided, modifier = Modifier.fillMaxSize() ) @@ -60,6 +61,12 @@ private fun LeftColumn( Spacer(modifier = Modifier.height(4.dp)) val listState = rememberSelectableLazyListState() + LaunchedEffect(myLocations) { + listState + .selectedKeys = myLocations + .mapIndexedNotNull { index, item -> if (item.isSelected) index else null } + .toSet() + } SelectableLazyColumn( modifier = modifier.fillMaxSize(),