dialog box in last sync

This commit is contained in:
moon 2026-07-13 16:40:25 +06:30
parent f08702125c
commit c3faee2eb0
4 changed files with 52 additions and 1 deletions

View File

@ -23,6 +23,9 @@ import androidx.compose.material.icons.filled.Menu
import androidx.compose.material.icons.filled.Notifications import androidx.compose.material.icons.filled.Notifications
import androidx.compose.material.icons.filled.Sync import androidx.compose.material.icons.filled.Sync
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.DrawerValue import androidx.compose.material3.DrawerValue
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
@ -47,6 +50,7 @@ import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import com.mob.utsmyanmar.R import com.mob.utsmyanmar.R
import com.mob.utsmyanmar.ui.components.appbar.AppBar import com.mob.utsmyanmar.ui.components.appbar.AppBar
import com.mob.utsmyanmar.ui.device_info.DeviceInfoUiState import com.mob.utsmyanmar.ui.device_info.DeviceInfoUiState
@ -176,6 +180,29 @@ fun DashboardScreen2(
) )
} }
if (dashboardUiState.isSyncing) {
Dialog(onDismissRequest = {}) {
Card(
shape = RoundedCornerShape(16.dp),
colors = CardDefaults.cardColors(containerColor = Color.White),
elevation = CardDefaults.cardElevation(8.dp)
) {
Column(
modifier = Modifier.padding(32.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
CircularProgressIndicator(color = Color.LegacyRed)
Spacer(Modifier.height(16.dp))
Text(
text = dashboardUiState.syncStatusText,
style = MaterialTheme.typography.bodyMedium,
color = Color.Black
)
}
}
}
}
ModalNavigationDrawer( ModalNavigationDrawer(
drawerState = drawerState, drawerState = drawerState,
drawerContent = { drawerContent = {

View File

@ -17,5 +17,7 @@ data class DashboardUiState(
val totalSaleCount: Int = 0, val totalSaleCount: Int = 0,
val totalSaleAmount: Long = 0L, val totalSaleAmount: Long = 0L,
val settlementStatusText: String = "Pending", val settlementStatusText: String = "Pending",
val settlementDateTimeText: String = "--/-- --:--" val settlementDateTimeText: String = "--/-- --:--",
val isSyncing: Boolean = false,
val syncStatusText: String = "Connecting to TMS server..."
) )

View File

@ -72,6 +72,18 @@ class DashboardViewModel @Inject constructor(
.takeIf { it > 0L } .takeIf { it > 0L }
_uiState.update { it.copy(lastSyncTime = time) } _uiState.update { it.copy(lastSyncTime = time) }
} }
fun startSync() {
_uiState.update { it.copy(isSyncing = true, syncStatusText = "Connecting to TMS server...") }
}
fun finishSync(message: String) {
_uiState.update { it.copy(syncStatusText = message) }
viewModelScope.launch {
kotlinx.coroutines.delay(1500)
_uiState.update { it.copy(isSyncing = false) }
}
}
} }
private fun PayDetail.toRecord(): TrnxRecord { private fun PayDetail.toRecord(): TrnxRecord {

View File

@ -125,6 +125,15 @@ fun AppNavGraph(
LaunchedEffect(tmsSetupViewModel) { LaunchedEffect(tmsSetupViewModel) {
tmsSetupViewModel.onSyncCompleted.collect { tmsSetupViewModel.onSyncCompleted.collect {
dashboardViewModel.refreshLastSyncTime() dashboardViewModel.refreshLastSyncTime()
dashboardViewModel.finishSync("Sync completed")
}
}
LaunchedEffect(tmsSetupUiState.isLoading, tmsSetupUiState.isError) {
if (dashboardUiState.isSyncing && !tmsSetupUiState.isLoading) {
if (tmsSetupUiState.isError) {
dashboardViewModel.finishSync(tmsSetupUiState.statusText.ifBlank { "Download failed!" })
}
} }
} }
@ -144,6 +153,7 @@ fun AppNavGraph(
dashboardUiState = dashboardUiState, dashboardUiState = dashboardUiState,
deviceInfo = deviceInfoUiState, deviceInfo = deviceInfoUiState,
onClickLastSync = { onClickLastSync = {
dashboardViewModel.startSync()
tmsSetupViewModel.downloadConfigs() tmsSetupViewModel.downloadConfigs()
}, },
onNavigateRecentTransaction = { record -> onNavigateRecentTransaction = { record ->