mirror of
https://github.com/JetBrains/intellij-platform-plugin-template.git
synced 2025-12-05 06:11:52 +00:00
Pass viewmodels as a composable param
This commit is contained in:
parent
6f47941636
commit
2486e30710
@ -1,17 +1,28 @@
|
|||||||
package org.jetbrains.plugins.template.toolWindow
|
package org.jetbrains.plugins.template.toolWindow
|
||||||
|
|
||||||
|
import com.intellij.openapi.components.service
|
||||||
import com.intellij.openapi.project.DumbAware
|
import com.intellij.openapi.project.DumbAware
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.wm.ToolWindow
|
import com.intellij.openapi.wm.ToolWindow
|
||||||
import com.intellij.openapi.wm.ToolWindowFactory
|
import com.intellij.openapi.wm.ToolWindowFactory
|
||||||
import org.jetbrains.jewel.bridge.addComposeTab
|
import org.jetbrains.jewel.bridge.addComposeTab
|
||||||
import org.jetbrains.plugins.template.ui.ChatAppSample
|
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
|
import org.jetbrains.plugins.template.weatherApp.ui.WeatherAppSample
|
||||||
|
|
||||||
class MyToolWindowFactory : ToolWindowFactory, DumbAware {
|
class MyToolWindowFactory : ToolWindowFactory, DumbAware {
|
||||||
|
|
||||||
override fun createToolWindowContent(project: Project, toolWindow: ToolWindow) {
|
override fun createToolWindowContent(project: Project, toolWindow: ToolWindow) {
|
||||||
toolWindow.addComposeTab("Weather App") { WeatherAppSample() }
|
toolWindow.addComposeTab("Weather App") {
|
||||||
|
val viewModel = service<MyLocationsViewModel>()
|
||||||
|
val locationProviderApi = service<LocationsProvider>()
|
||||||
|
WeatherAppSample(
|
||||||
|
viewModel,
|
||||||
|
viewModel,
|
||||||
|
locationProviderApi
|
||||||
|
)
|
||||||
|
}
|
||||||
toolWindow.addComposeTab("Chat App") { ChatAppSample() }
|
toolWindow.addComposeTab("Chat App") { ChatAppSample() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3,13 +3,13 @@ package org.jetbrains.plugins.template.weatherApp.ui
|
|||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color.Companion.Transparent
|
import androidx.compose.ui.graphics.Color.Companion.Transparent
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.intellij.openapi.components.service
|
|
||||||
import org.jetbrains.jewel.bridge.retrieveColorOrUnspecified
|
import org.jetbrains.jewel.bridge.retrieveColorOrUnspecified
|
||||||
import org.jetbrains.jewel.foundation.lazy.SelectableLazyColumn
|
import org.jetbrains.jewel.foundation.lazy.SelectableLazyColumn
|
||||||
import org.jetbrains.jewel.foundation.lazy.SelectionMode
|
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
|
import org.jetbrains.plugins.template.weatherApp.ui.components.WeatherDetailsCard
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
internal fun WeatherAppSample() {
|
internal fun WeatherAppSample(
|
||||||
val viewModel: MyLocationsViewModel = service<MyLocationsViewModel>()
|
myLocationViewModel: MyLocationsViewModelApi,
|
||||||
val searchAutoCompletionItemProvided = service<LocationsProvider>()
|
weatherViewModelApi: WeatherViewModelApi,
|
||||||
|
searchAutoCompletionItemProvided: LocationsProvider
|
||||||
|
) {
|
||||||
HorizontalSplitLayout(
|
HorizontalSplitLayout(
|
||||||
first = { LeftColumn(viewModel, modifier = Modifier.fillMaxSize()) },
|
first = { LeftColumn(myLocationViewModel, modifier = Modifier.fillMaxSize()) },
|
||||||
second = {
|
second = {
|
||||||
RightColumn(
|
RightColumn(
|
||||||
viewModel,
|
myLocationViewModel,
|
||||||
viewModel,
|
weatherViewModelApi,
|
||||||
searchAutoCompletionItemProvided,
|
searchAutoCompletionItemProvided,
|
||||||
modifier = Modifier.fillMaxSize()
|
modifier = Modifier.fillMaxSize()
|
||||||
)
|
)
|
||||||
@ -60,6 +61,12 @@ private fun LeftColumn(
|
|||||||
Spacer(modifier = Modifier.height(4.dp))
|
Spacer(modifier = Modifier.height(4.dp))
|
||||||
|
|
||||||
val listState = rememberSelectableLazyListState()
|
val listState = rememberSelectableLazyListState()
|
||||||
|
LaunchedEffect(myLocations) {
|
||||||
|
listState
|
||||||
|
.selectedKeys = myLocations
|
||||||
|
.mapIndexedNotNull { index, item -> if (item.isSelected) index else null }
|
||||||
|
.toSet()
|
||||||
|
}
|
||||||
|
|
||||||
SelectableLazyColumn(
|
SelectableLazyColumn(
|
||||||
modifier = modifier.fillMaxSize(),
|
modifier = modifier.fillMaxSize(),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user