different home screen layouts

This commit is contained in:
Trey t
2025-12-13 09:18:57 -06:00
parent 4713192d55
commit 6adef2d6fc
5 changed files with 382 additions and 15 deletions

View File

@@ -22,6 +22,7 @@ struct DayView: View {
@AppStorage(UserDefaultsStore.Keys.moodImages.rawValue, store: GroupUserDefaults.groupDefaults) private var imagePack: MoodImages = .FontAwesome
@AppStorage(UserDefaultsStore.Keys.moodTint.rawValue, store: GroupUserDefaults.groupDefaults) private var moodTint: MoodTints = .Default
@AppStorage(UserDefaultsStore.Keys.textColor.rawValue, store: GroupUserDefaults.groupDefaults) private var textColor: Color = DefaultTextColor.textColor
@AppStorage(UserDefaultsStore.Keys.dayViewStyle.rawValue, store: GroupUserDefaults.groupDefaults) private var dayViewStyle: DayViewStyle = .classic
// store a value that gets changed when user updates custom colors to update the view since the moodTint doesn't change
@AppStorage(UserDefaultsStore.Keys.customMoodTintUpdateNumber.rawValue, store: GroupUserDefaults.groupDefaults) private var customMoodTintUpdateNumber: Int = 0
@@ -162,13 +163,23 @@ extension DayView {
.background(.ultraThinMaterial)
}
private var gridColumns: [GridItem] {
[
GridItem(.flexible(), spacing: 10),
GridItem(.flexible(), spacing: 10),
GridItem(.flexible(), spacing: 10)
]
}
@ViewBuilder
private func monthListView(month: Int, year: Int, entries: [MoodEntryModel]) -> some View {
VStack(spacing: 12) {
// for reach all entries
ForEach(entries.sorted(by: {
return $0.forDate > $1.forDate
}), id: \.self) { entry in
if filteredDays.currentFilters.contains(entry.weekDay) {
let filteredEntries = entries.sorted(by: { $0.forDate > $1.forDate })
.filter { filteredDays.currentFilters.contains($0.weekDay) }
if dayViewStyle.isGridLayout {
// Grid layout - 3 per row
LazyVGrid(columns: gridColumns, spacing: 10) {
ForEach(filteredEntries, id: \.self) { entry in
EntryListView(entry: entry)
.contentShape(Rectangle())
.onTapGesture(perform: {
@@ -177,9 +188,23 @@ extension DayView {
})
}
}
.padding(.horizontal, 12)
.padding(.top, 8)
} else {
// Standard vertical layout
VStack(spacing: 12) {
ForEach(filteredEntries, id: \.self) { entry in
EntryListView(entry: entry)
.contentShape(Rectangle())
.onTapGesture(perform: {
selectedEntry = entry
showUpdateEntryAlert = true
})
}
}
.padding(.horizontal, 12)
.padding(.top, 8)
}
.padding(.horizontal, 12)
.padding(.top, 8)
}
}