ExportMenu.swift 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. //
  2. // ExportMenu.swift
  3. // Todos
  4. //
  5. // Created by Sam Jaffe on 3/1/26.
  6. //
  7. import SwiftUI
  8. import SwiftData
  9. import UniformTypeIdentifiers
  10. struct ExportMenu: View {
  11. @Environment(\.modelContext) private var modelContext
  12. @AppStorage(UserDefaultsKeys.Category) var allGroups = CodableArray<Category>()
  13. @AppStorage(UserDefaultsKeys.UrlHints) var allHints = CodableArray<URLHint>()
  14. @Query private var items: [Project]
  15. @State private var showingExporter = false
  16. var body: some View {
  17. Button("Export") {
  18. showingExporter = true
  19. }
  20. .keyboardShortcut("E", modifiers: [.command, .shift])
  21. .fileExporter(isPresented: $showingExporter, document: StubJsonDocument(),
  22. contentType: .json) { result in
  23. switch result {
  24. case .success(let url):
  25. let transfer = Transfer(projects: items, hints: allHints, categories: allGroups)
  26. guard let data = try? JSONEncoder().encode(transfer)
  27. else {
  28. return
  29. }
  30. SaveController.save(data: data, toUrl: url)
  31. case .failure(let error):
  32. print(error.localizedDescription)
  33. }
  34. }
  35. }
  36. }
  37. #Preview {
  38. ExportMenu()
  39. }