Repository: 02loveslollipop/MiPedido
Pull request #21: feat: Add back navigation confirmation dialogs across multiple screens
Author: login: 02loveslollipop
Created: 2025-05-04T05:48:36Z | Merged: 2025-05-04T05:59:58Z

This pull request introduces a consistent back navigation confirmation mechanism across multiple screens in the app. It ensures users are prompted with a confirmation dialog before navigating away, preventing accidental data loss or unintended navigation. Additionally, it replaces generic top bars with a custom `NavBar` component for better UI consistency.

### Back Navigation Confirmation:
* Added a `BackHandler` to handle system back button presses with a confirmation dialog in `CheckoutQRScreen`, `OrderAcceptedScreen`, and `ReviewScreen`. The confirmation dialog warns users about potential data loss and provides options to either exit or stay. [[1]](diffhunk://#diff-5dd39861f7633311f6c6387a893144292383f0bd977d40cf2d8ce854099931b7R214-R216) [[2]](diffhunk://#diff-ad37bdd7d550ae26b3d4681000c1e7ebf831a4d49b4cdbffb832e1477bf8e849R109-R111) [[3]](diffhunk://#diff-ab0c82167ac2574f47dae9ebe86263c9ef53b080c5dbf39eac55ee237cb77111R114-R115)
* Introduced a `showExitConfirmation` state and corresponding `AlertDialog` components for confirmation dialogs in `CheckoutQRScreen`, `OrderAcceptedScreen`, and `ReviewScreen`. [[1]](diffhunk://#diff-5dd39861f7633311f6c6387a893144292383f0bd977d40cf2d8ce854099931b7R71-R109) [[2]](diffhunk://#diff-ad37bdd7d550ae26b3d4681000c1e7ebf831a4d49b4cdbffb832e1477bf8e849R22-R69) [[3]](diffhunk://#diff-ab0c82167ac2574f47dae9ebe86263c9ef53b080c5dbf39eac55ee237cb77111R26-R70)

### UI Enhancements:
* Replaced the default `TopAppBar` with the custom `NavBar` component in `CheckoutSlaveScreen`, `OrderAcceptedScreen`, and `ReviewScreen`. This ensures a consistent look and feel across screens. [[1]](diffhunk://#diff-483df0e528f29b5e24dd1a73e847a85ba7a9e8e97aa5b852f7a1506c6203ad29L27-R34) [[2]](diffhunk://#diff-ad37bdd7d550ae26b3d4681000c1e7ebf831a4d49b4cdbffb832e1477bf8e849R22-R69) [[3]](diffhunk://#diff-ab0c82167ac2574f47dae9ebe86263c9ef53b080c5dbf39eac55ee237cb77111R26-R70)

### Navigation Utilities:
* Added a new utility function `safeNavigateBackWithConfirmation` in `NavigationUtils` to standardize back navigation handling with confirmation prompts.


Diff:
diff --git a/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/MainActivity.kt b/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/MainActivity.kt
index f7daff0..7613fc9 100644
--- a/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/MainActivity.kt
+++ b/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/MainActivity.kt
@@ -33,6 +33,16 @@ object NavigationUtils {
             onComplete?.invoke()
         }
     }
+
+    // Function to handle back navigation with confirmation
+    fun safeNavigateBackWithConfirmation(
+        showConfirmation: MutableState<Boolean>,
+        confirmationAction: () -> Unit
+    ): () -> Unit = {
+        if (!isNavigating) {
+            showConfirmation.value = true
+        }
+    }
 }
 
 class MainActivity : ComponentActivity() {
diff --git a/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/components/BackConfirmationDialog.kt b/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/components/BackConfirmationDialog.kt
new file mode 100644
index 0000000..ce3e0bd
--- /dev/null
+++ b/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/components/BackConfirmationDialog.kt
@@ -0,0 +1,108 @@
+package uk.app02loveslollipop.mipedido.cliente.components
+
+import androidx.activity.compose.BackHandler
+import androidx.compose.material3.*
+import androidx.compose.runtime.*
+import androidx.compose.ui.text.style.TextAlign
+
+/**
+ * A reusable component that handles back navigation with a confirmation dialog.
+ *
+ * @param showDialog Whether the dialog is currently shown or not
+ * @param onShowDialogChange Callback to update the dialog visibility state
+ * @param onConfirm Action to perform when the user confirms (usually navigation)
+ * @param onDismiss Action to perform when the user dismisses the dialog (usually stay on screen)
+ * @param title Dialog title text
+ * @param message Dialog message text
+ * @param confirmButtonText Text for the confirm button (usually "Salir")
+ * @param dismissButtonText Text for the dismiss button (usually "Volver")
+ */
+@Composable
+fun BackConfirmationDialog(
+    showDialog: Boolean,
+    onShowDialogChange: (Boolean) -> Unit,
+    onConfirm: () -> Unit,
+    onDismiss: () -> Unit = { onShowDialogChange(false) },
+    title: String = "¿Estás seguro que deseas salir?",
+    message: String,
+    confirmButtonText: String = "Salir",
+    dismissButtonText: String = "Volver"
+) {
+    if (showDialog) {
+        AlertDialog(
+            onDismissRequest = { onShowDialogChange(false) },
+            title = { Text(title) },
+            text = { Text(message, textAlign = TextAlign.Start) },
+            confirmButton = {
+                Button(
+                    onClick = {
+                        onShowDialogChange(false)
+                        onConfirm()
+                    },
+                    colors = ButtonDefaults.buttonColors(
+                        containerColor = MaterialTheme.colorScheme.error
+                    )
+                ) {
+                    Text(confirmButtonText)
+                }
+            },
+            dismissButton = {
+                Button(
+                    onClick = {
+                        onShowDialogChange(false)
+                        onDismiss()
+                    },
+                    colors = ButtonDefaults.buttonColors(
+                        containerColor = MaterialTheme.colorScheme.primary
+                    )
+                ) {
+                    Text(dismissButtonText)
+                }
+            }
+        )
+    }
+}
+
+/**
+ * A composable function that handles both the back button and the dialog state.
+ * Use this in screens that need back navigation confirmation.
+ *
+ * @param message The message to show in the confirmation dialog
+ * @param onConfirmNavigation The action to perform when back navigation is confirmed
+ * @param title Dialog title text
+ * @param confirmButtonText Text for the confirm button
+ * @param dismissButtonText Text for the dismiss button
+ * @return A lambda that can be used for NavBar's onBackPressed parameter
+ */
+@Composable
+fun useBackConfirmation(
+    message: String,
+    onConfirmNavigation: () -> Unit,
+    title: String = "¿Estás seguro que deseas salir?",
+    confirmButtonText: String = "Salir",
+    dismissButtonText: String = "Volver"
+): Pair<() -> Unit, @Composable () -> Unit> {
+    var showConfirmationDialog by remember { mutableStateOf(false) }
+    
+    val handleBackPress = {
+        showConfirmationDialog = true
+    }
+    
+    val dialogContent = @Composable {
+        // Handle system back button
+        BackHandler(onBack = handleBackPress)
+        
+        // Show the confirmation dialog when needed
+        BackConfirmationDialog(
+            showDialog = showConfirmationDialog,
+            onShowDialogChange = { showConfirmationDialog = it },
+            onConfirm = onConfirmNavigation,
+            title = title,
+            message = message,
+            confirmButtonText = confirmButtonText,
+            dismissButtonText = dismissButtonText
+        )
+    }
+    
+    return Pair(handleBackPress, dialogContent)
+}
\ No newline at end of file
diff --git a/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/screens/CheckoutQRScreen.kt b/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/screens/CheckoutQRScreen.kt
index 708f633..db5c2bc 100644
--- a/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/screens/CheckoutQRScreen.kt
+++ b/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/screens/CheckoutQRScreen.kt
@@ -14,6 +14,7 @@ import androidx.navigation.NavController
 import uk.app02loveslollipop.mipedido.cliente.api.WebSocketConnector
 import uk.app02loveslollipop.mipedido.cliente.components.NavBar
 import uk.app02loveslollipop.mipedido.cliente.components.QrCodeGenerator
+import uk.app02loveslollipop.mipedido.cliente.components.useBackConfirmation
 import uk.app02loveslollipop.mipedido.cliente.utils.Base36Utils
 
 @OptIn(ExperimentalMaterial3Api::class)
@@ -32,6 +33,17 @@ fun CheckoutQRScreen(
     var orderCompleted by remember { mutableStateOf(false) }
     var errorMessage by remember { mutableStateOf<String?>(null) }
     val wsConnector = remember { WebSocketConnector.getInstance() }
+    
+    // Function to navigate back to restaurants screen
+    val navigateToRestaurants = {
+        navController?.popBackStack("restaurants", false)
+    }
+    
+    // Using the shared back confirmation hook
+    val (handleBackPress, BackConfirmationDialogContent) = useBackConfirmation(
+        message = "Si sales de esta pestaña perderás tu pedido y tendrás que empezar el proceso nuevamente",
+        onConfirmNavigation = navigateToRestaurants
+    )
 
     DisposableEffect(orderId) {
         val listener = object : WebSocketConnector.WebSocketListener {
@@ -63,7 +75,7 @@ fun CheckoutQRScreen(
         topBar = {
             NavBar(
                 title = "Finalizar Pedido",
-                onBackPressed = onNavigateBack
+                onBackPressed = handleBackPress
             )
         }
     ) { paddingValues ->
@@ -168,4 +180,7 @@ fun CheckoutQRScreen(
             Spacer(modifier = Modifier.height(24.dp))
         }
     }
+    
+    // Include the confirmation dialog
+    BackConfirmationDialogContent()
 }
\ No newline at end of file
diff --git a/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/screens/CheckoutSlaveScreen.kt b/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/screens/CheckoutSlaveScreen.kt
index 9bc9d66..83940bf 100644
--- a/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/screens/CheckoutSlaveScreen.kt
+++ b/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/screens/CheckoutSlaveScreen.kt
@@ -1,5 +1,6 @@
 package uk.app02loveslollipop.mipedido.cliente.screens
 
+import androidx.activity.compose.BackHandler
 import androidx.compose.foundation.layout.*
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.filled.CheckCircle
@@ -9,6 +10,7 @@ import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.unit.dp
+import uk.app02loveslollipop.mipedido.cliente.components.NavBar
 import java.text.NumberFormat
 import java.util.Locale
 
@@ -24,8 +26,12 @@ fun CheckoutSlaveScreen(
     val currencyFormatter = NumberFormat.getCurrencyInstance(Locale.getDefault())
 
     Scaffold(
-        // Optional: Add a simple top bar if needed
-        // topBar = { TopAppBar(title = { Text("Pedido Agregado") }) }
+        topBar = {
+            NavBar(
+                title = "Pedido Agregado",
+                onBackPressed = { onFinish() } // Navigate back to home screen
+            )
+        }
     ) { paddingValues ->
         Column(
             modifier = modifier
@@ -86,4 +92,7 @@ fun CheckoutSlaveScreen(
             }
         }
     }
+    
+    // Handle system back button to also return to home screen
+    BackHandler(onBack = { onFinish() })
 }
\ No newline at end of file
diff --git a/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/screens/OrderAcceptedScreen.kt b/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/screens/OrderAcceptedScreen.kt
index 59f1151..0c0ade0 100644
--- a/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/screens/OrderAcceptedScreen.kt
+++ b/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/screens/OrderAcceptedScreen.kt
@@ -8,6 +8,8 @@ import androidx.compose.ui.Modifier
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.unit.dp
 import androidx.navigation.NavController
+import uk.app02loveslollipop.mipedido.cliente.components.NavBar
+import uk.app02loveslollipop.mipedido.cliente.components.useBackConfirmation
 
 @OptIn(ExperimentalMaterial3Api::class)
 @Composable
@@ -17,9 +19,23 @@ fun OrderAcceptedScreen(
     userId: String,
     navController: NavController? = null
 ) {
+    // Function to navigate back to restaurants screen
+    val navigateToRestaurants = {
+        navController?.popBackStack("restaurants", false)
+    }
+    
+    // Using the shared back confirmation hook
+    val (handleBackPress, BackConfirmationDialogContent) = useBackConfirmation(
+        message = "Se te enviará una notificación en aproximadamente 30 minutos para revisar este pedido. Si no quieres esperar, permanece en esta página y presiona el botón de revisión cuando desees calificar el pedido.",
+        onConfirmNavigation = navigateToRestaurants
+    )
+
     Scaffold(
         topBar = {
-            TopAppBar(title = { Text("Pedido aceptado") })
+            NavBar(
+                title = "Pedido aceptado",
+                onBackPressed = handleBackPress
+            )
         }
     ) { paddingValues ->
         Column(
@@ -59,4 +75,7 @@ fun OrderAcceptedScreen(
             }
         }
     }
+    
+    // Include the confirmation dialog
+    BackConfirmationDialogContent()
 }
diff --git a/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/screens/ReviewScreen.kt b/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/screens/ReviewScreen.kt
index 4eced0a..0a3beac 100644
--- a/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/screens/ReviewScreen.kt
+++ b/appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/screens/ReviewScreen.kt
@@ -11,6 +11,8 @@ import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.unit.dp
 import androidx.navigation.NavController
+import uk.app02loveslollipop.mipedido.cliente.components.NavBar
+import uk.app02loveslollipop.mipedido.cliente.components.useBackConfirmation
 
 @OptIn(ExperimentalMaterial3Api::class)
 @Composable
@@ -21,9 +23,23 @@ fun ReviewScreen(
     navController: NavController? = null
 ) {
     var rating by remember { mutableStateOf(0) }
+
+    val navigateToRestaurants = {
+        navController?.popBackStack("restaurants", false)
+    }
+    
+    // Using the shared back confirmation hook
+    val (handleBackPress, BackConfirmationDialogContent) = useBackConfirmation(
+        message = "Si sales sin enviar una reseña, no podrás calificar este pedido más adelante.",
+        onConfirmNavigation = navigateToRestaurants
+    )
+
     Scaffold(
         topBar = {
-            TopAppBar(title = { Text("Califica tu pedido") })
+            NavBar(
+                title = "Califica tu pedido",
+                onBackPressed = handleBackPress
+            )
         }
     ) { paddingValues ->
         Column(
@@ -58,7 +74,7 @@ fun ReviewScreen(
             Spacer(modifier = Modifier.height(32.dp))
             Button(
                 onClick = {
-                    navController?.popBackStack()
+                    navigateToRestaurants()
                 },
                 enabled = rating > 0,
                 modifier = Modifier.fillMaxWidth()
@@ -67,4 +83,7 @@ fun ReviewScreen(
             }
         }
     }
+    
+    // Include the confirmation dialog
+    BackConfirmationDialogContent()
 }


Reviews:
user: login: copilot-pull-request-reviewer[bot]
body: ## Pull Request Overview

This pull request introduces a consistent back navigation confirmation mechanism across several screens and updates the navigation UI by replacing the default top bar with a custom NavBar component. Key changes include:  
- Addition of back navigation confirmation dialogs using AlertDialog and BackHandler in ReviewScreen, OrderAcceptedScreen, and CheckoutQRScreen,  
- Replacement of TopAppBar with the custom NavBar component across several screens, and  
- A new utility function (safeNavigateBackWithConfirmation) in NavigationUtils for standardizing back navigation confirmation.

### Reviewed Changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.

<details>
<summary>Show a summary per file</summary>

| File | Description |
| ---- | ----------- |
| ReviewScreen.kt | Added confirmation dialog with BackHandler and replaced TopAppBar with NavBar. |
| OrderAcceptedScreen.kt | Introduced confirmation dialog and BackHandler for back navigation, replacing TopAppBar with NavBar. |
| CheckoutSlaveScreen.kt | Replaced TopAppBar with NavBar and added BackHandler for back navigation to finish the flow. |
| CheckoutQRScreen.kt | Added confirmation dialog and BackHandler for back navigation along with replacing the top bar action. |
| MainActivity.kt | Added a new safeNavigateBackWithConfirmation utility function in NavigationUtils. |
</details>





state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-04T05:49:38Z
user: login: copilot-pull-request-reviewer[bot]
body: ## Pull Request Overview

This PR introduces a consistent back navigation confirmation mechanism across multiple app screens while also enhancing the UI by replacing the default top bars with a custom NavBar.  
- Implements a shared back confirmation hook (useBackConfirmation) and dialog component across CheckoutQRScreen, OrderAcceptedScreen, and ReviewScreen.  
- Replaces TopAppBar with NavBar in several screens for improved UI consistency.  
- Adds a new navigation utility function (safeNavigateBackWithConfirmation) in NavigationUtils.

### Reviewed Changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated no comments.

<details>
<summary>Show a summary per file</summary>

| File | Description |
| ---- | ----------- |
| ReviewScreen.kt | Integrated useBackConfirmation and replaced TopAppBar with NavBar. |
| OrderAcceptedScreen.kt | Updated back navigation to use useBackConfirmation and NavBar. |
| CheckoutSlaveScreen.kt | Replaced TopAppBar with NavBar and added a BackHandler to navigate to home. |
| CheckoutQRScreen.kt | Adopted useBackConfirmation for back navigation and replaced onBackPressed logic. |
| BackConfirmationDialog.kt | Introduced reusable dialog and hook for back confirmation handling. |
| MainActivity.kt | Added safeNavigateBackWithConfirmation utility in NavigationUtils for standardized back navigation. |
</details>



<details>
<summary>Comments suppressed due to low confidence (1)</summary>

**appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/MainActivity.kt:42**
* The variable 'isNavigating' is referenced in safeNavigateBackWithConfirmation but its declaration is not visible in this diff. Please ensure it is defined in the proper context to avoid unintended navigation behavior.
```
if (!isNavigating) {
```
</details>


state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-04T05:58:11Z

Review comments:
diff_hunk: @@ -21,9 +23,51 @@ fun ReviewScreen(
     navController: NavController? = null
 ) {
     var rating by remember { mutableStateOf(0) }
+    var showExitConfirmation by remember { mutableStateOf(false) }
+
+    val navigateToRestaurants = {
+        navController?.popBackStack("restaurants", false)
+    }
+
+    if (showExitConfirmation) {
+        AlertDialog(
+            onDismissRequest = { showExitConfirmation = false },
+            title = { Text("¿Estás seguro que deseas salir?") },
+            text = {
+                Text("Si sales sin enviar una review, no podrás calificar este pedido más adelante.")
+            },
+            confirmButton = {
+                Button(
+                    onClick = {
+                        showExitConfirmation = false
+                        navigateToRestaurants()
+                    },
+                    colors = ButtonDefaults.buttonColors(
+                        containerColor = MaterialTheme.colorScheme.error
+                    )
+                ) {
+                    Text("Salir")
+                }
+            },
+            dismissButton = {
+                Button(
+                    onClick = { showExitConfirmation = false },
+                    colors = ButtonDefaults.buttonColors(
+                        containerColor = MaterialTheme.colorScheme.primary
+                    )
+                ) {
+                    Text("Volver")
+                }
+            }
+        )
+    }
path: appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/screens/ReviewScreen.kt
user: login: Copilot
body: [nitpick] The confirmation dialog logic and back button handling is implemented directly in this screen. Consider extracting a reusable composable for back navigation confirmation to reduce code duplication across multiple screens.
```suggestion
    val navigateToRestaurants = {
        navController?.popBackStack("restaurants", false)
    }

    BackNavigationConfirmationDialog(
        onConfirmExit = { navigateToRestaurants() },
        onDismiss = { /* No action needed */ }
    )
```
created_at: 2025-05-04T05:49:37Z
author_association: CONTRIBUTOR
diff_hunk: @@ -17,9 +19,54 @@ fun OrderAcceptedScreen(
     userId: String,
     navController: NavController? = null
 ) {
+    // State for showing back navigation confirmation dialog
+    var showExitConfirmation by remember { mutableStateOf(false) }
path: appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/screens/OrderAcceptedScreen.kt
user: login: Copilot
body: [nitpick] The confirmation dialog and BackHandler code is repeated here. Refactoring this pattern into a shared composable or helper function could improve consistency and ease future updates.
created_at: 2025-05-04T05:49:38Z
author_association: CONTRIBUTOR
diff_hunk: @@ -59,11 +68,45 @@ fun CheckoutQRScreen(
         return
     }
 
+    // Exit Confirmation Dialog
+    if (showExitConfirmation) {
path: appCliente/app/src/main/java/uk/app02loveslollipop/mipedido/cliente/screens/CheckoutQRScreen.kt
user: login: Copilot
body: [nitpick] This file contains similar back confirmation dialog logic as seen in other screens. Consider abstracting the confirmation dialog and back navigation handling into a reusable component to reduce duplication and improve maintainability.
created_at: 2025-05-04T05:49:38Z
author_association: CONTRIBUTOR

PR comments:
user: login: vercel[bot]
created_at: 2025-05-04T05:48:40Z
body: [vc]: #mSVYHqu4W4V/yDN/CJyzqPM9d9sr0gAi3G4oqssbRm8=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJtaV9wZWRpZG8iLCJpbnNwZWN0b3JVcmwiOiJodHRwczovL3ZlcmNlbC5jb20vMDJsb3Zlc2xvbGxpcG9wLXByb2plY3RzL21pX3BlZGlkby9CRjhYVExkZkR5NHd6TE5tQzdWdEZWZlpOeXdZIiwicHJldmlld1VybCI6Im1pcGVkaWRvLWdpdC0xMi1maXgtaGFuZGxlLWJhY2stN2IxZDZhLTAybG92ZXNsb2xsaXBvcC1wcm9qZWN0cy52ZXJjZWwuYXBwIiwibmV4dENvbW1pdFN0YXR1cyI6IkRFUExPWUVEIiwibGl2ZUZlZWRiYWNrIjp7InJlc29sdmVkIjowLCJ1bnJlc29sdmVkIjowLCJ0b3RhbCI6MCwibGluayI6Im1pcGVkaWRvLWdpdC0xMi1maXgtaGFuZGxlLWJhY2stN2IxZDZhLTAybG92ZXNsb2xsaXBvcC1wcm9qZWN0cy52ZXJjZWwuYXBwIn0sInJvb3REaXJlY3RvcnkiOiJhcHBWZW5kZWRvci9hcHBfdmVuZGVkb3JfbWlwZWRpZG8ifV19
**The latest updates on your projects**. Learn more about [Vercel for Git ↗︎](https://vercel.link/github-learn-more)

| Name | Status | Preview | Comments | Updated (UTC) |
| :--- | :----- | :------ | :------- | :------ |
| **mi_pedido** | ✅ Ready ([Inspect](https://vercel.com/02loveslollipop-projects/mi_pedido/BF8XTLdfDy4wzLNmC7VtFVfZNywY)) | [Visit Preview](https://mipedido-git-12-fix-handle-back-7b1d6a-02loveslollipop-projects.vercel.app) | 💬 [**Add feedback**](https://vercel.live/open-feedback/mipedido-git-12-fix-handle-back-7b1d6a-02loveslollipop-projects.vercel.app?via=pr-comment-feedback-link) | May 4, 2025 6:00am |


author_association: NONE
user: login: sonarqubecloud[bot]
created_at: 2025-05-04T05:58:32Z
body: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=02loveslollipop_MiPedido&pullRequest=21) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [5 New issues](https://sonarcloud.io/project/issues?id=02loveslollipop_MiPedido&pullRequest=21&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=02loveslollipop_MiPedido&pullRequest=21&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=02loveslollipop_MiPedido&pullRequest=21&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=02loveslollipop_MiPedido&pullRequest=21&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=02loveslollipop_MiPedido&pullRequest=21&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=02loveslollipop_MiPedido&pullRequest=21)


author_association: NONE
user: login: 02loveslollipop
created_at: 2025-05-04T05:59:08Z
body: Passed AI and Sonarqube quality checks 
author_association: OWNER