diff --git a/src/main/kotlin/org/jetbrains/plugins/template/toolWindow/ComposeSamplesToolWindowFactory.kt b/src/main/kotlin/org/jetbrains/plugins/template/toolWindow/ComposeSamplesToolWindowFactory.kt index 8de6428..03a47e8 100644 --- a/src/main/kotlin/org/jetbrains/plugins/template/toolWindow/ComposeSamplesToolWindowFactory.kt +++ b/src/main/kotlin/org/jetbrains/plugins/template/toolWindow/ComposeSamplesToolWindowFactory.kt @@ -1,39 +1,38 @@ package org.jetbrains.plugins.template.toolWindow import androidx.compose.runtime.DisposableEffect -import androidx.compose.runtime.remember 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 kotlinx.coroutines.Dispatchers import org.jetbrains.jewel.bridge.addComposeTab import org.jetbrains.plugins.template.CoroutineScopeHolder import org.jetbrains.plugins.template.ui.ChatAppSample import org.jetbrains.plugins.template.weatherApp.model.Location import org.jetbrains.plugins.template.weatherApp.services.LocationsProvider -import org.jetbrains.plugins.template.weatherApp.ui.WeatherAppViewModel import org.jetbrains.plugins.template.weatherApp.services.WeatherForecastService import org.jetbrains.plugins.template.weatherApp.ui.WeatherAppSample +import org.jetbrains.plugins.template.weatherApp.ui.WeatherAppViewModel class ComposeSamplesToolWindowFactory : ToolWindowFactory, DumbAware { + override fun shouldBeAvailable(project: Project) = true override fun createToolWindowContent(project: Project, toolWindow: ToolWindow) { - val coroutineScopeHolder = project.service() + weatherApp(project, toolWindow) + chatApp(project, toolWindow) + } + + private fun weatherApp(project: Project, toolWindow: ToolWindow) { + // create ViewModel once per tool window + val viewModel = WeatherAppViewModel( + listOf(Location("Munich", "Germany")), + project.service() + .createScope(WeatherAppViewModel::class.java.simpleName), + WeatherForecastService() + ) toolWindow.addComposeTab("Weather App") { - val locationProviderApi = remember { service() } - val viewModel = remember { - val weatherForecastServiceApi = WeatherForecastService(Dispatchers.IO) - WeatherAppViewModel( - listOf(Location("Munich", "Germany")), - coroutineScopeHolder - .createScope(WeatherAppViewModel::class.java.simpleName), - weatherForecastServiceApi - ) - } - DisposableEffect(Unit) { viewModel.onReloadWeatherForecast() @@ -43,12 +42,14 @@ class ComposeSamplesToolWindowFactory : ToolWindowFactory, DumbAware { WeatherAppSample( viewModel, viewModel, - locationProviderApi + service() ) } - - toolWindow.addComposeTab("Chat App") { ChatAppSample() } } - override fun shouldBeAvailable(project: Project) = true + private fun chatApp(project: Project, toolWindow: ToolWindow) { + toolWindow.addComposeTab("Chat App") { + ChatAppSample() + } + } }