diff --git a/MisticaCatalog/Source/Catalog/Mistica/Components/UICatalogSheetViewController.swift b/MisticaCatalog/Source/Catalog/Mistica/Components/UICatalogSheetViewController.swift index d6c2b1434..b5e201c0b 100644 --- a/MisticaCatalog/Source/Catalog/Mistica/Components/UICatalogSheetViewController.swift +++ b/MisticaCatalog/Source/Catalog/Mistica/Components/UICatalogSheetViewController.swift @@ -188,7 +188,9 @@ extension UICatalogSheetViewController: UITableViewDataSource, UITableViewDelega ) let viewController = SheetViewController(configuration: configuration) { sheetResponse in - print("Sheet selection response: \(sheetResponse)") + print("Sheet selection response:") + print("\tAction:\(sheetResponse.action)") + print("\tSelected ids:\(sheetResponse.selectedIds)") } viewController.transitioningDelegate = sheetTransitioningDelegate viewController.modalPresentationStyle = .custom diff --git a/Sources/Mistica/Components/Sheet/View/SheetView.swift b/Sources/Mistica/Components/Sheet/View/SheetView.swift index 57adb6ad8..87859a974 100644 --- a/Sources/Mistica/Components/Sheet/View/SheetView.swift +++ b/Sources/Mistica/Components/Sheet/View/SheetView.swift @@ -135,17 +135,7 @@ private extension SheetView { imageView.heightAnchor.constraint(equalToConstant: icon.size.value).isActive = true imageView.widthAnchor.constraint(equalToConstant: icon.size.value).isActive = true imageView.contentMode = .scaleAspectFit - if let url = URL(string: icon.url), - let data = try? Data(contentsOf: url) { - let lightImage = UIImage(data: data) - if let iconDark = icon.urlDark, - let urlDark = URL(string: iconDark), - let dataDark = try? Data(contentsOf: urlDark), - let darkImage = UIImage(data: dataDark) { - lightImage?.imageAsset?.register(darkImage, with: .init(userInterfaceStyle: .dark)) - } - imageView.image = lightImage - } + load(icon: icon, in: imageView) itemStackView.addArrangedSubview(imageView) } @@ -263,4 +253,14 @@ private extension SheetView { } } } + + func load(icon: SheetListRowIcon, in imageView: UIImageView) { + guard let url = URL(string: icon.url) else { return } + if let urlDark = icon.urlDark, + let urlForDarkMode = URL(string: urlDark) { + imageView.load(url: url, urlForDarkMode: urlForDarkMode) + } else { + imageView.load(url: url) + } + } } diff --git a/Sources/Mistica/Utils/Extensions/UIImageView+URL.swift b/Sources/Mistica/Utils/Extensions/UIImageView+URL.swift new file mode 100644 index 000000000..55bc1092f --- /dev/null +++ b/Sources/Mistica/Utils/Extensions/UIImageView+URL.swift @@ -0,0 +1,41 @@ +// +// UIImageView+URL.swift +// +// Made with ❤️ by Novum +// +// Copyright © Telefonica. All rights reserved. +// + +import UIKit + +extension UIImageView { + /// Loads the urls asynchronously + func load(url: URL, urlForDarkMode: URL? = nil) { + DispatchQueue.global().async { [weak self] in + guard let imageData = try? Data(contentsOf: url) else { return } + if let urlForDarkMode = urlForDarkMode, + let darkImageData = try? Data(contentsOf: urlForDarkMode) { + self?.updateImage(imageData: imageData, darkImageData: darkImageData) + } else { + self?.updateImage(imageData: imageData) + } + } + } +} + +private extension UIImageView { + func updateImage(imageData: Data, darkImageData: Data) { + DispatchQueue.main.async { [weak self] in + self?.image = UIImage(data: imageData) + if let darkImage = UIImage(data: darkImageData) { + self?.image?.imageAsset?.register(darkImage, with: .init(userInterfaceStyle: .dark)) + } + } + } + + func updateImage(imageData: Data) { + DispatchQueue.main.async { [weak self] in + self?.image = UIImage(data: imageData) + } + } +}