DEV Community

Harsh Prajapat
Harsh Prajapat

Posted on

TodoListView

import SwiftUI

struct TodoListView: View {

    @StateObject private var viewModel: TodoListViewModel

    init(viewModel: TodoListViewModel) {
        _viewModel = StateObject(
            wrappedValue: viewModel
        )
    }

    var body: some View {

        NavigationStack {

            Group {

                if viewModel.isLoading {

                    ProgressView()

                } else {

                    List(viewModel.todos) { todo in

                        HStack {

                            Image(
                                systemName: todo.completed
                                ? "checkmark.circle.fill"
                                : "circle"
                            )

                            Text(todo.title)
                        }
                    }
                }
            }
            .navigationTitle("Todos")
            .task {
                viewModel.loadTodos()
            }
            .alert(
                "Error",
                isPresented: .constant(
                    viewModel.errorMessage != nil
                )
            ) {
                Button("OK") {}
            } message: {
                Text(viewModel.errorMessage ?? "")
            }
        }
    }
}

Enter fullscreen mode Exit fullscreen mode
@main
struct TodoAppApp: App {
    let persistenceController = PersistenceController.shared
    private let container = AppContainer()

    var body: some Scene {
        WindowGroup {
            TodoListView(
                viewModel: TodoListViewModel(
                    repository: container.todoRepository
                )
            )
            .environment(\.managedObjectContext, persistenceController.container.viewContext)
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)