From b0361af7a85bfa1e7f21178670071a41b7de1782 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Wed, 19 Oct 2022 14:25:50 +0200
Subject: [PATCH] Add ImagePicker view to AppCore

---
 .../AppCore/SharedUI/ImagePicker.swift        | 49 +++++++++++++++++++
 1 file changed, 49 insertions(+)
 create mode 100644 Examples/xx-messenger/Sources/AppCore/SharedUI/ImagePicker.swift

diff --git a/Examples/xx-messenger/Sources/AppCore/SharedUI/ImagePicker.swift b/Examples/xx-messenger/Sources/AppCore/SharedUI/ImagePicker.swift
new file mode 100644
index 00000000..c0b5fbad
--- /dev/null
+++ b/Examples/xx-messenger/Sources/AppCore/SharedUI/ImagePicker.swift
@@ -0,0 +1,49 @@
+import UIKit
+import SwiftUI
+
+public struct ImagePicker: UIViewControllerRepresentable {
+  public init(onImport: @escaping (UIImage) -> Void) {
+    self.onImport = onImport
+  }
+
+  var onImport: (UIImage) -> Void
+  @Environment(\.presentationMode) private var presentationMode
+
+  public func makeCoordinator() -> Coordinator {
+    Coordinator(self)
+  }
+
+  public func makeUIViewController(context: Context) -> UIImagePickerController {
+    let controller = UIImagePickerController()
+    controller.delegate = context.coordinator
+    return controller
+  }
+
+  public func updateUIViewController(
+    _ uiViewController: UIImagePickerController,
+    context: Context
+  ) {}
+}
+
+extension ImagePicker {
+  public final class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
+    init(_ picker: ImagePicker) {
+      self.picker = picker
+      super.init()
+    }
+
+    public func imagePickerController(
+      _ controller: UIImagePickerController,
+      didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]
+    ) {
+      if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
+        DispatchQueue.main.async {
+          self.picker.onImport(image)
+        }
+      }
+      picker.presentationMode.wrappedValue.dismiss()
+    }
+
+    let picker: ImagePicker
+  }
+}
-- 
GitLab