[Mobile] 2.2.0 - Calendar View
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user