ConfigEditorRootView.swift 2.2 KB

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