LogView.swift 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // LoopFollow
  2. // LogView.swift
  3. // Created by Jonas Björkert on 2025-01-13.
  4. import SwiftUI
  5. struct LogView: View {
  6. @ObservedObject var viewModel = LogViewModel()
  7. @Environment(\.presentationMode) var presentationMode
  8. var body: some View {
  9. NavigationView {
  10. VStack {
  11. Picker("Category", selection: $viewModel.selectedCategory) {
  12. Text("All").tag(LogManager.Category?.none)
  13. ForEach(LogManager.Category.allCases, id: \.self) { category in
  14. Text(category.rawValue).tag(LogManager.Category?.some(category))
  15. }
  16. }
  17. .pickerStyle(MenuPickerStyle())
  18. SearchBar(text: $viewModel.searchText)
  19. .padding([.leading, .trailing])
  20. ScrollView {
  21. LazyVStack(alignment: .leading, spacing: 2) {
  22. ForEach(viewModel.filteredLogEntries) { entry in
  23. Text(entry.text)
  24. .font(.system(size: 12, design: .monospaced))
  25. .frame(maxWidth: .infinity, alignment: .leading)
  26. .padding(.vertical, 0)
  27. }
  28. }
  29. .padding(.horizontal)
  30. }
  31. }
  32. .navigationBarTitle("Today's Logs", displayMode: .inline)
  33. .toolbar {
  34. ToolbarItem(placement: .navigationBarTrailing) {
  35. Button("Done") {
  36. presentationMode.wrappedValue.dismiss()
  37. }
  38. }
  39. }
  40. .onAppear {
  41. viewModel.loadLogEntries()
  42. }
  43. }
  44. .preferredColorScheme(Storage.shared.forceDarkMode.value ? .dark : nil)
  45. }
  46. }