CategorySettingsView.swift 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. //
  2. // CategorySettingsView.swift
  3. // Todos
  4. //
  5. // Created by Sam Jaffe on 3/2/26.
  6. //
  7. import SwiftUI
  8. struct CategorySettingsView: View {
  9. @AppStorage(UserDefaultsKeys.Category) var allGroups = CodableArray<Category>()
  10. @State var active = Category()
  11. var body: some View {
  12. Table(of: Binding<Category>.self) {
  13. TableColumn("Color") { group in
  14. ColorPicker("", selection: group.color, supportsOpacity: false)
  15. }
  16. TableColumn("Name") { group in
  17. TextField("Category Name", text: group.name)
  18. .onSubmit(addGroup)
  19. }
  20. TableColumn("") { group in
  21. if group.id != active.id {
  22. Button {
  23. allGroups.removeAll(where: { $0.id == group.id })
  24. } label: {
  25. Label("", systemImage: "trash")
  26. }
  27. }
  28. }.width(max: 20)
  29. } rows: {
  30. ForEach($allGroups) { group in
  31. TableRow(group)
  32. }
  33. TableRow($active)
  34. }
  35. }
  36. private func addGroup() {
  37. if active.valid {
  38. allGroups.append(active)
  39. active = Category()
  40. }
  41. }
  42. }
  43. #Preview {
  44. CategorySettingsView()
  45. }