DataTableRootView.swift 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import SwiftUI
  2. import Swinject
  3. extension DataTable {
  4. struct RootView: BaseView {
  5. let resolver: Resolver
  6. @StateObject var state = StateModel()
  7. @State private var isRemoveCarbsAlertPresented = false
  8. @State private var removeCarbsAlert: Alert?
  9. private var dateFormatter: DateFormatter {
  10. let formatter = DateFormatter()
  11. formatter.timeStyle = .short
  12. return formatter
  13. }
  14. var body: some View {
  15. Form {
  16. list
  17. }
  18. .onAppear(perform: configureView)
  19. .navigationTitle("History")
  20. .navigationBarTitleDisplayMode(.automatic)
  21. .navigationBarItems(
  22. leading: Button("Close", action: state.hideModal)
  23. )
  24. }
  25. private var list: some View {
  26. List {
  27. ForEach(state.items.indexed(), id: \.1.id) { _, item in
  28. HStack {
  29. Image(systemName: "circle.fill").foregroundColor(item.color)
  30. Text(dateFormatter.string(from: item.date))
  31. .moveDisabled(true)
  32. Text(item.type.name)
  33. Text(item.amountText).foregroundColor(.secondary)
  34. if let duration = item.durationText {
  35. Text(duration).foregroundColor(.secondary)
  36. }
  37. if item.type == .carbs {
  38. Spacer()
  39. Image(systemName: "xmark.circle").foregroundColor(.secondary)
  40. .contentShape(Rectangle())
  41. .padding(.vertical)
  42. .onTapGesture {
  43. removeCarbsAlert = Alert(
  44. title: Text("Delete carbs?"),
  45. message: Text(item.amountText),
  46. primaryButton: .destructive(
  47. Text("Delete"),
  48. action: { state.deleteCarbs(at: item.date) }
  49. ),
  50. secondaryButton: .cancel()
  51. )
  52. isRemoveCarbsAlertPresented = true
  53. }
  54. .alert(isPresented: $isRemoveCarbsAlertPresented) {
  55. removeCarbsAlert!
  56. }
  57. }
  58. }
  59. }
  60. }
  61. }
  62. }
  63. }