ADD: history

This commit is contained in:
webfussel 2025-08-04 09:11:59 +02:00
parent 85b233ad7e
commit 70b83d7900
2 changed files with 125 additions and 17 deletions

View file

@ -57,7 +57,10 @@ fun SoulEchoApp(moodViewModel: MoodViewModel) {
)
}
"history" -> {
HistorySection()
HistorySection(
moodViewModel = moodViewModel,
paddingValues = paddingValues,
)
}
}
}

View file

@ -1,32 +1,137 @@
package de.webfussel.soulecho.history
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import de.webfussel.soulecho.data.entity.MoodEntity
import de.webfussel.soulecho.mood.Moods.getMoodById
import de.webfussel.soulecho.ui.theme.getColorForMood
import de.webfussel.soulecho.viewmodel.MoodViewModel
import java.time.format.DateTimeFormatter
@Composable
fun HistorySection() {
Column(
fun HistorySection(
moodViewModel: MoodViewModel,
paddingValues: PaddingValues = PaddingValues(0.dp)
) {
val allMoods by moodViewModel.allMoods.collectAsState(initial = emptyList())
LazyColumn(
contentPadding = PaddingValues(
top = paddingValues.calculateTopPadding(),
bottom = paddingValues.calculateBottomPadding(),
),
modifier = Modifier
.fillMaxSize()
.padding(16.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
.fillMaxSize(),
) {
Text(
text = "Verlauf",
style = MaterialTheme.typography.headlineMedium
)
Spacer(modifier = Modifier.height(16.dp))
if (allMoods.isEmpty()) {
item {
EmptyHistoryCard()
}
} else {
items(
items = allMoods,
key = { moodEntity -> moodEntity.id }
) { moodEntity ->
MoodHistoryCard(
moodEntity = moodEntity,
onDelete = { moodViewModel.deleteMood(it) }
)
}
}
}
}
@Composable
fun MoodHistoryCard(
moodEntity: MoodEntity,
onDelete: (MoodEntity) -> Unit
) {
Column (
modifier = Modifier
.background(Color.White)
.padding(16.dp),
){
Row(
modifier = Modifier
.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically
) {
val currentMood = getMoodById(moodEntity.mood)
Icon(
painter = painterResource(currentMood.icon),
contentDescription = currentMood.label,
tint = getColorForMood(moodEntity.mood).fg,
modifier = Modifier.size(48.dp)
)
Column (
modifier = Modifier.padding(start = 16.dp)
){
Text(
text = currentMood.label,
style = MaterialTheme.typography.headlineSmall,
color = MaterialTheme.colorScheme.onSurfaceVariant
)
Text(
text = moodEntity.info,
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant,
)
}
}
Text(
text = "Hier wird der Stimmungsverlauf angezeigt",
style = MaterialTheme.typography.bodyLarge
text = moodEntity.timestamp.format(
DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm")
),
style = MaterialTheme.typography.bodySmall,
color = Color.Black,
modifier = Modifier.padding(top = 4.dp)
)
}
HorizontalDivider(
thickness = 1.dp,
color = Color.LightGray,
)
}
@Composable
fun EmptyHistoryCard() {
Card(
modifier = Modifier.fillMaxWidth(),
elevation = CardDefaults.cardElevation(defaultElevation = 2.dp)
) {
Box(
modifier = Modifier
.fillMaxWidth()
.padding(32.dp),
contentAlignment = Alignment.Center
) {
Column(
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(
text = "Keine Stimmungen gefunden",
style = MaterialTheme.typography.headlineSmall,
color = MaterialTheme.colorScheme.onSurfaceVariant
)
Text(
text = "Beginnen Sie damit, Ihre erste Stimmung zu erfassen!",
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.padding(top = 8.dp)
)
}
}
}
}