2020-08-29 03:50:58 +00:00
|
|
|
// Copyright © 2020 Metabolist. All rights reserved.
|
|
|
|
|
|
|
|
import SwiftUI
|
2020-09-01 07:33:49 +00:00
|
|
|
import ViewModels
|
2020-08-29 03:50:58 +00:00
|
|
|
|
|
|
|
struct ListsView: View {
|
|
|
|
@StateObject var viewModel: ListsViewModel
|
|
|
|
@EnvironmentObject var tabNavigationViewModel: TabNavigationViewModel
|
|
|
|
@State private var newListTitle = ""
|
|
|
|
|
|
|
|
var body: some View {
|
|
|
|
Form {
|
|
|
|
Section {
|
|
|
|
TextField("lists.new-list-title", text: $newListTitle)
|
|
|
|
.disabled(viewModel.creatingList)
|
|
|
|
if viewModel.creatingList {
|
|
|
|
ProgressView()
|
|
|
|
.frame(maxWidth: .infinity, alignment: .center)
|
|
|
|
} else {
|
|
|
|
Button {
|
|
|
|
viewModel.createList(title: newListTitle)
|
|
|
|
} label: {
|
|
|
|
Label("add", systemImage: "plus.circle")
|
|
|
|
}
|
|
|
|
.disabled(newListTitle == "")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Section {
|
|
|
|
ForEach(viewModel.lists) { list in
|
|
|
|
Button(list.title) {
|
|
|
|
tabNavigationViewModel.timeline = .list(list)
|
|
|
|
tabNavigationViewModel.presentingSecondaryNavigation = false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.onDelete {
|
|
|
|
guard let index = $0.first else { return }
|
|
|
|
|
|
|
|
viewModel.delete(list: viewModel.lists[index])
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.navigationTitle(Text("secondary-navigation.lists"))
|
|
|
|
.toolbar {
|
|
|
|
ToolbarItem(placement: ToolbarItemPlacement.navigationBarTrailing) {
|
|
|
|
EditButton()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.alertItem($viewModel.alertItem)
|
|
|
|
.onAppear(perform: viewModel.refreshLists)
|
|
|
|
.onReceive(viewModel.$creatingList) {
|
|
|
|
if !$0 {
|
|
|
|
newListTitle = ""
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#if DEBUG
|
2020-09-01 07:33:49 +00:00
|
|
|
import PreviewViewModels
|
|
|
|
|
2020-08-29 03:50:58 +00:00
|
|
|
struct ListsView_Previews: PreviewProvider {
|
|
|
|
static var previews: some View {
|
2020-09-01 07:33:49 +00:00
|
|
|
ListsView(viewModel: .mock())
|
|
|
|
.environmentObject(TabNavigationViewModel.mock())
|
2020-08-29 03:50:58 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|