mirror of
https://github.com/openflocon/Flocon.git
synced 2026-04-28 10:19:33 +00:00
refact: [NETWORK] detail in window (#446)
Co-authored-by: Florent Champigny <florent@bere.al>
This commit is contained in:
parent
e66e0570ee
commit
a5d4bbcd81
6 changed files with 36 additions and 3 deletions
|
|
@ -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()
|
||||
) {
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue