[Mobile] 2.2.0 - Calendar View

This commit is contained in:
2025-10-18 16:26:17 -06:00
parent d4023133b7
commit 105d39689d
9 changed files with 719 additions and 16 deletions

View File

@@ -1,9 +1,24 @@
import Combine
import SwiftUI
enum SessionViewMode: String {
case list
case calendar
}
struct SessionsView: View {
@EnvironmentObject var dataManager: ClimbingDataManager
@State private var showingAddSession = false
@AppStorage("sessionViewMode") private var viewMode: SessionViewMode = .list
@State private var selectedMonth = Date()
@State private var selectedDate: Date? = nil
@State private var selectedSessionId: UUID? = nil
private var completedSessions: [ClimbSession] {
dataManager.sessions
.filter { $0.status == .completed }
.sorted { $0.date > $1.date }
}
var body: some View {
NavigationStack {
@@ -11,7 +26,18 @@ struct SessionsView: View {
if dataManager.sessions.isEmpty && dataManager.activeSession == nil {
EmptySessionsView()
} else {
SessionsList()
if viewMode == .list {
SessionsList()
} else {
CalendarView(
sessions: completedSessions,
selectedMonth: $selectedMonth,
selectedDate: $selectedDate,
onNavigateToSession: { sessionId in
selectedSessionId = sessionId
}
)
}
}
}
.navigationTitle("Sessions")
@@ -36,6 +62,20 @@ struct SessionsView: View {
)
}
// View mode toggle
if !dataManager.sessions.isEmpty || dataManager.activeSession != nil {
Button(action: {
withAnimation(.easeInOut(duration: 0.2)) {
viewMode = viewMode == .list ? .calendar : .list
selectedDate = nil
}
}) {
Image(systemName: viewMode == .list ? "calendar" : "list.bullet")
.font(.body)
.fontWeight(.semibold)
}
}
if dataManager.gyms.isEmpty {
EmptyView()
} else if dataManager.activeSession == nil {
@@ -52,6 +92,14 @@ struct SessionsView: View {
.sheet(isPresented: $showingAddSession) {
AddEditSessionView()
}
.navigationDestination(isPresented: .constant(selectedSessionId != nil)) {
if let sessionId = selectedSessionId {
SessionDetailView(sessionId: sessionId)
.onDisappear {
selectedSessionId = nil
}
}
}
}
}
}