import SwiftUI struct EventDetailView: View { let event: ChurchEvent @State private var showingDirections = false @State private var showingShareSheet = false @State private var showingCalendarAlert = false @State private var calendarMessage = "" @State private var shareText = "" var body: some View { ScrollView { LazyVStack(alignment: .leading, spacing: 20) { // Event Image if let imageUrl = event.image { AsyncImage(url: URL(string: imageUrl)) { image in image .resizable() .aspectRatio(contentMode: .fit) .frame(maxHeight: 200) } placeholder: { Rectangle() .fill(LinearGradient( colors: [Color.blue.opacity(0.6), Color.purple.opacity(0.8)], startPoint: .topLeading, endPoint: .bottomTrailing )) .frame(height: 200) } .cornerRadius(12) } VStack(alignment: .leading, spacing: 16) { // Title and Category VStack(alignment: .leading, spacing: 8) { if !event.category.isEmpty { Text(event.category.uppercased()) .font(.caption) .fontWeight(.bold) .foregroundColor(.blue) .padding(.horizontal, 8) .padding(.vertical, 4) .background(Color.blue.opacity(0.1)) .cornerRadius(8) } Text(event.title) .font(.largeTitle) .fontWeight(.bold) .lineLimit(nil) Text(event.description) .font(.body) .foregroundColor(.secondary) .lineLimit(nil) } Divider() // Event Details VStack(alignment: .leading, spacing: 12) { HStack { Image(systemName: "calendar") .foregroundColor(.blue) .frame(width: 20) Text(event.formattedDate) .font(.body) } HStack { Image(systemName: "clock") .foregroundColor(.blue) .frame(width: 20) Text(event.detailedTimeDisplay) .font(.body) } if !event.location.isEmpty { HStack { Image(systemName: "location.fill") .foregroundColor(.blue) .frame(width: 20) Text(event.location) .font(.body) .lineLimit(nil) } } } Divider() // Action Buttons EventActionButtons( event: event, showingDirections: $showingDirections, showingShareSheet: $showingShareSheet, showingCalendarAlert: $showingCalendarAlert, calendarMessage: $calendarMessage, style: .iphone ) } .padding(16) .padding(.bottom, 100) } } .ignoresSafeArea(.keyboard) .navigationBarTitleDisplayMode(.inline) .onAppear { shareText = EventDetailActions.createShareText(for: event) } .sheet(isPresented: $showingDirections) { Text("Directions to \(event.location)") } #if os(iOS) .sheet(isPresented: $showingShareSheet) { ShareSheet(activityItems: [shareText]) } #endif .alert("Calendar", isPresented: $showingCalendarAlert) { Button("OK") { } } message: { Text(calendarMessage) } } } #Preview { NavigationStack { EventDetailView(event: ChurchEvent.sampleEvent()) } }