ConfigEditorRootView.swift 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import SwiftUI
  2. import Swinject
  3. extension ConfigEditor {
  4. struct RootView: BaseView {
  5. let resolver: Resolver
  6. let file: String
  7. @StateObject var state = StateModel()
  8. @State private var showShareSheet = false
  9. var body: some View {
  10. TextEditor(text: $state.configText)
  11. .keyboardType(.asciiCapable)
  12. .font(.system(.subheadline, design: .monospaced))
  13. .allowsTightening(true)
  14. .autocapitalization(.none)
  15. .disableAutocorrection(true)
  16. .toolbar {
  17. ToolbarItemGroup(placement: .bottomBar) {
  18. Spacer()
  19. Button { showShareSheet = true }
  20. label: {
  21. Image(systemName: "square.and.arrow.up")
  22. }
  23. }
  24. }
  25. .navigationBarItems(
  26. trailing: Button("Save", action: state.save)
  27. )
  28. .sheet(isPresented: $showShareSheet) {
  29. ShareSheet(activityItems: [state.provider.urlFor(file: state.file)!])
  30. }
  31. .onAppear {
  32. configureView {
  33. state.file = file
  34. }
  35. }
  36. .navigationTitle(file)
  37. .navigationBarTitleDisplayMode(.inline)
  38. .padding()
  39. }
  40. }
  41. }
  42. struct ShareSheet: UIViewControllerRepresentable {
  43. typealias Callback = (_ activityType: UIActivity.ActivityType?, _ completed: Bool, _ returnedItems: [Any]?, _ error: Error?)
  44. -> Void
  45. let activityItems: [Any]
  46. let applicationActivities: [UIActivity]? = nil
  47. let excludedActivityTypes: [UIActivity.ActivityType]? = nil
  48. let callback: Callback? = nil
  49. func makeUIViewController(context _: Context) -> UIActivityViewController {
  50. let controller = UIActivityViewController(
  51. activityItems: activityItems,
  52. applicationActivities: applicationActivities
  53. )
  54. controller.excludedActivityTypes = excludedActivityTypes
  55. controller.completionWithItemsHandler = callback
  56. return controller
  57. }
  58. func updateUIViewController(_: UIActivityViewController, context _: Context) {
  59. // nothing to do here
  60. }
  61. }