Skip to content

Commit

Permalink
review: Use a data class instead of a Pair
Browse files Browse the repository at this point in the history
  • Loading branch information
KevinBoulongne committed Nov 13, 2024
1 parent 926c1f2 commit b6f0b05
Showing 1 changed file with 19 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
*/
package com.infomaniak.swisstransfer.ui.screen.main.transfers

import android.os.Parcelable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
Expand All @@ -37,19 +38,20 @@ import com.infomaniak.swisstransfer.ui.screen.main.transferdetails.TransferDetai
import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme
import com.infomaniak.swisstransfer.ui.utils.PreviewAllWindows
import com.infomaniak.swisstransfer.ui.utils.ScreenWrapperUtils
import kotlinx.parcelize.Parcelize

@OptIn(ExperimentalMaterial3AdaptiveApi::class)
@Composable
fun TransfersScreenWrapper(direction: TransferDirection) {
TwoPaneScaffold<Pair<TransferDirection, String>>(
TwoPaneScaffold<DestinationContent>(
listPane = { ListPane(direction, navigator = this) },
detailPane = { DetailPane(navigator = this) },
)
}

@OptIn(ExperimentalMaterial3AdaptiveApi::class)
@Composable
private fun ListPane(direction: TransferDirection, navigator: ThreePaneScaffoldNavigator<Pair<TransferDirection, String>>) {
private fun ListPane(direction: TransferDirection, navigator: ThreePaneScaffoldNavigator<DestinationContent>) {
when (direction) {
TransferDirection.SENT -> SentScreen(
navigateToDetails = { transferUuid -> navigator.navigateToDetails(direction, transferUuid) },
Expand All @@ -63,30 +65,30 @@ private fun ListPane(direction: TransferDirection, navigator: ThreePaneScaffoldN
}

@OptIn(ExperimentalMaterial3AdaptiveApi::class)
private fun ThreePaneScaffoldNavigator<Pair<TransferDirection, String>>.navigateToDetails(
private fun ThreePaneScaffoldNavigator<DestinationContent>.navigateToDetails(
direction: TransferDirection,
transferUuid: String,
) {
navigateTo(ListDetailPaneScaffoldRole.Detail, direction to transferUuid)
navigateTo(ListDetailPaneScaffoldRole.Detail, DestinationContent(direction, transferUuid))
}

@OptIn(ExperimentalMaterial3AdaptiveApi::class)
private fun ThreePaneScaffoldNavigator<Pair<TransferDirection, String>>.getSelectedTransferUuid(): String? {
return currentDestination?.content?.second
private fun ThreePaneScaffoldNavigator<DestinationContent>.getSelectedTransferUuid(): String? {
return currentDestination?.content?.transferUuid
}

@OptIn(ExperimentalMaterial3AdaptiveApi::class)
@Composable
private fun DetailPane(navigator: ThreePaneScaffoldNavigator<Pair<TransferDirection, String>>) {
private fun DetailPane(navigator: ThreePaneScaffoldNavigator<DestinationContent>) {

val (direction, transferUuid) = navigator.safeCurrentContent() ?: (TransferDirection.SENT to null)
val destinationContent = navigator.safeCurrentContent()

if (transferUuid == null) {
if (destinationContent == null) {
NoSelectionEmptyState()
} else {
TransferDetailsScreen(
transferUuid = transferUuid,
direction = direction,
transferUuid = destinationContent.transferUuid,
direction = destinationContent.direction,
navigateBack = ScreenWrapperUtils.getBackNavigation(navigator),
)
}
Expand All @@ -99,6 +101,12 @@ private fun NoSelectionEmptyState() {
}
}

@Parcelize
private data class DestinationContent(
val direction: TransferDirection,
val transferUuid: String,
) : Parcelable

@PreviewAllWindows
@Composable
private fun Preview() {
Expand Down

0 comments on commit b6f0b05

Please sign in to comment.