Skip to content
This repository has been archived by the owner on Oct 23, 2023. It is now read-only.

Commit

Permalink
feat(app): create Reminder as UI component
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreaBrighi committed Jun 21, 2023
1 parent 99ed5bf commit d220b1a
Showing 1 changed file with 123 additions and 0 deletions.
123 changes: 123 additions & 0 deletions app/src/main/kotlin/com/intelligentbackpack/app/view/Reminder.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
package com.intelligentbackpack.app.view

import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavHostController
import androidx.navigation.compose.rememberNavController
import com.intelligentbackpack.app.ui.common.CalendarTopBar
import com.intelligentbackpack.app.ui.common.SchoolSupplyCard
import com.intelligentbackpack.app.viewmodel.ReminderViewModel
import java.time.LocalDate

/**
* UI component that represents the reminder.
*
* @param navController the navigation controller.
* @param reminderViewModel the view model.
*/
@Composable
fun Reminder(
navController: NavHostController,
reminderViewModel: ReminderViewModel = viewModel(
factory = ReminderViewModel.Factory,
),
) {
Column(
modifier = Modifier.fillMaxSize(),
verticalArrangement = Arrangement.Top,
horizontalAlignment = Alignment.CenterHorizontally,
) {
var openErrorDialog by remember { mutableStateOf(false) }
var error by remember { mutableStateOf("") }
if (openErrorDialog) {
AlertDialog(
onDismissRequest = {
openErrorDialog = false
},
title = {
Text(text = "Reminder error")
},
text = {
Text(error)
},
confirmButton = {
},
dismissButton = {
Button(
onClick = {
openErrorDialog = false
},
) {
Text("Ok")
}
},
)
}
var isBackpackAssociated by remember { mutableStateOf(false) }
var selectedDate by remember { mutableStateOf(LocalDate.now()) }
val missing by reminderViewModel.missing.observeAsState(emptyList())
LaunchedEffect(key1 = Unit) {
reminderViewModel.isBackpackAssociated({
if (it) {
isBackpackAssociated = true
reminderViewModel.getReminders(selectedDate) { message ->
error = message
openErrorDialog = true
}
} else {
isBackpackAssociated = false
}
}, {
error = it
openErrorDialog = true
})
}
CalendarTopBar { date ->
selectedDate = date
if (isBackpackAssociated) {
reminderViewModel.getReminders(selectedDate) {
error = it
openErrorDialog = true
}
}
}
if (!isBackpackAssociated) {
Text(text = "No backpack associated")
} else {
LazyColumn(
modifier = Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(8.dp, Alignment.Top),
) {
items(missing) { missing ->
SchoolSupplyCard(navHostController = navController, schoolSupply = missing)
}
}
}
}
}

@Preview
@Composable
fun ReminderPreview() {
val navController = rememberNavController()
Reminder(navController)
}

0 comments on commit d220b1a

Please sign in to comment.