refact: [NETWORK] detail in window (#446)

Co-authored-by: Florent Champigny <florent@bere.al>
This commit is contained in:
Florent CHAMPIGNY 2025-12-09 11:20:02 +01:00 committed by GitHub
parent e66e0570ee
commit a5d4bbcd81
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 36 additions and 3 deletions

View file

@ -33,6 +33,12 @@ internal sealed interface NetworkRoutes : FloconRoute {
NetworkRoutes,
PanelRoute
@Serializable
data class WindowDetail(
val requestId: String,
val windowKey: String,
) : NetworkRoutes
@Serializable
data class JsonDetail(
val json: String,
@ -66,6 +72,11 @@ fun EntryProviderScope<FloconRoute>.networkRoutes() {
fromNetworkCallId = it.id
)
}
entry<NetworkRoutes.WindowDetail>(
metadata = WindowSceneStrategy.window()
) {
NetworkDetailScreen(requestId = it.requestId, key = it.windowKey)
}
entry<NetworkRoutes.JsonDetail>(
metadata = WindowSceneStrategy.window()
) {

View file

@ -61,9 +61,10 @@ private const val LARGE_BODY_LENGHT = 30_000
@Composable
fun NetworkDetailScreen(
requestId: String
requestId: String,
key: String = requestId,
) {
val viewModel = koinViewModel<NetworkDetailViewModel> {
val viewModel = koinViewModel<NetworkDetailViewModel>(key = key) {
parametersOf(requestId)
}
val uiState by viewModel.uiState.collectAsStateWithLifecycle()

View file

@ -68,6 +68,8 @@ import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
import kotlin.uuid.ExperimentalUuidApi
import kotlin.uuid.Uuid
class NetworkViewModel(
observeNetworkRequestsUseCase: ObserveNetworkRequestsUseCase,
@ -272,6 +274,7 @@ class NetworkViewModel(
NetworkAction.ClearMultiSelect -> onClearMultiSelect()
NetworkAction.MultiSelect -> onMultiSelect()
NetworkAction.DeleteSelection -> onDeleteSelection()
is NetworkAction.DoubleClicked -> onDoubleClicked(action)
}
}
@ -499,6 +502,15 @@ class NetworkViewModel(
.also { onClearMultiSelect() }
}
}
@OptIn(ExperimentalUuidApi::class)
private fun onDoubleClicked(action: NetworkAction.DoubleClicked) {
navigationState.navigate(NetworkRoutes.WindowDetail(
requestId = action.item.uuid,
windowKey = Uuid.random().toString(),
))
}
}
private fun Map<NetworkTextFilterColumns, TextFilterStateUiModel>.toDomain(): List<Filters> = buildList {

View file

@ -62,6 +62,8 @@ sealed interface NetworkAction {
val itemIdToSelect: String,
) : NetworkAction
data class DoubleClicked(val item: NetworkItemViewState) : NetworkAction
data object ClearMultiSelect : NetworkAction
sealed interface HeaderAction : NetworkAction {

View file

@ -2,9 +2,11 @@ package io.github.openflocon.flocondesktop.features.network.list.view
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.Image
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
@ -54,6 +56,7 @@ import org.jetbrains.compose.ui.tooling.preview.Preview
private val replayColor = Color(0xFF242D44)
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun NetworkItemView(
state: NetworkItemViewState,
@ -95,7 +98,10 @@ fun NetworkItemView(
Modifier.background(FloconTheme.colorPalette.accent)
} else Modifier,
)
.clickable(onClick = { onAction(NetworkAction.SelectRequest(state.uuid)) })
.combinedClickable(
onClick = { onAction(NetworkAction.SelectRequest(state.uuid)) },
onDoubleClick = { onAction(NetworkAction.DoubleClicked(state)) }
)
.then(
if (selected) {
Modifier.border(

View file

@ -39,6 +39,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.State
import androidx.compose.runtime.getValue
import androidx.compose.runtime.key
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment