1 // Copyright 2022-present 650 Industries. All rights reserved. 2 3 import ExpoModulesCore 4 import SDWebImage 5 import SDWebImageWebPCoder 6 import SDWebImageAVIFCoder 7 import SDWebImageSVGCoder 8 9 public final class ImageModule: Module { 10 lazy var prefetcher = SDWebImagePrefetcher.shared 11 12 public func definition() -> ModuleDefinition { 13 Name("ExpoImage") 14 15 OnCreate { 16 ImageModule.registerCoders() 17 } 18 19 View(ImageView.self) { 20 Events( 21 "onLoadStart", 22 "onProgress", 23 "onError", 24 "onLoad" 25 ) 26 27 Prop("source") { (view, sourceSet: Either<ImageSource, [ImageSource]>) in 28 if let source: ImageSource = sourceSet.get() { 29 view.sources = [source] 30 } 31 if let sources: [ImageSource] = sourceSet.get() { 32 view.sources = sources 33 } 34 } 35 36 Prop("resizeMode") { (view, resizeMode: ImageResizeMode) in 37 view.resizeMode = resizeMode 38 } 39 40 Prop("transition") { (view, transition: ImageTransition?) in 41 view.transition = transition 42 } 43 44 Prop("blurRadius") { (view, blurRadius: Double?) in 45 view.blurRadius = blurRadius ?? .zero 46 } 47 48 Prop("tintColor") { (view, tintColor: UIColor?) in 49 view.imageTintColor = tintColor ?? .clear 50 } 51 52 OnViewDidUpdateProps { view in 53 view.reload() 54 } 55 } 56 57 Function("clearMemoryCache") { 58 SDImageCache.shared.clearMemory() 59 } 60 61 Function("clearDiskCache") { 62 SDImageCache.shared.clearDisk() 63 } 64 } 65 66 static func registerCoders() { 67 SDImageCodersManager.shared.addCoder(SDImageWebPCoder.shared) 68 SDImageCodersManager.shared.addCoder(SDImageAVIFCoder.shared) 69 SDImageCodersManager.shared.addCoder(SDImageSVGCoder.shared) 70 SDImageCodersManager.shared.addCoder(SDImageHEICCoder.shared) 71 } 72 } 73