import SwiftUI struct TasksView: View { @EnvironmentObject var authManager: AuthManager @State private var tasks: [PulseTask] = [] @State private var isLoading = true @State private var showAddTask = false @State private var filter: TaskFilter = .pending enum TaskFilter: String, CaseIterable { case pending = "Активные" case completed = "Выполненные" case all = "Все" } var filteredTasks: [PulseTask] { switch filter { case .pending: return tasks.filter { !$0.completed } case .completed: return tasks.filter { $0.completed } case .all: return tasks } } var body: some View { ZStack { Color(hex: "0a0a1a").ignoresSafeArea() VStack(spacing: 0) { // Header HStack { Text("Задачи").font(.title.bold()).foregroundColor(.white) Spacer() Button(action: { showAddTask = true }) { Image(systemName: "plus.circle.fill").font(.title2).foregroundColor(Color(hex: "00d4aa")) } }.padding() // Filter Picker("", selection: $filter) { ForEach(TaskFilter.allCases, id: \.self) { f in Text(f.rawValue).tag(f) } } .pickerStyle(.segmented) .padding(.horizontal) .padding(.bottom, 8) if isLoading { ProgressView().tint(Color(hex: "00d4aa")).padding(.top, 40) Spacer() } else if filteredTasks.isEmpty { VStack(spacing: 12) { Text("✅").font(.system(size: 50)) Text(filter == .pending ? "Нет активных задач" : "Нет задач") .foregroundColor(Color(hex: "8888aa")) }.padding(.top, 60) Spacer() } else { List { ForEach(filteredTasks) { task in TaskRowView(task: task) { await completeTask(task) } .listRowBackground(Color.clear) .listRowSeparator(.hidden) } .onDelete { indices in let tasksToDelete = indices.map { filteredTasks[$0] } Task { for task in tasksToDelete { try? await APIService.shared.deleteTask(token: authManager.token, id: task.id) } await loadTasks() } } } .listStyle(.plain) .scrollContentBackground(.hidden) } } } .sheet(isPresented: $showAddTask) { AddTaskView(isPresented: $showAddTask) { await loadTasks() } } .task { await loadTasks() } .refreshable { await loadTasks() } } func loadTasks() async { isLoading = true tasks = (try? await APIService.shared.getTasks(token: authManager.token)) ?? [] isLoading = false } func completeTask(_ task: PulseTask) async { try? await APIService.shared.completeTask(token: authManager.token, id: task.id) await loadTasks() UIImpactFeedbackGenerator(style: .light).impactOccurred() } }