From 7af98902c3117316c00ec4b925b1c5dfac831e2c Mon Sep 17 00:00:00 2001 From: Gary Tokman Date: Fri, 13 Sep 2024 11:36:27 -0400 Subject: [PATCH] feat: add prefetch --- ios/FasterImageViewManager.m | 2 ++ ios/FasterImageViewManager.swift | 12 ++++++++++++ src/index.tsx | 14 ++++++++++++-- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/ios/FasterImageViewManager.m b/ios/FasterImageViewManager.m index 02cb02a..029e0d0 100644 --- a/ios/FasterImageViewManager.m +++ b/ios/FasterImageViewManager.m @@ -10,4 +10,6 @@ @interface RCT_EXTERN_MODULE(FasterImageViewManager, RCTViewManager) RCT_EXTERN_METHOD(clearCache:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) +RCT_EXTERN_METHOD(prefetch:(NSArray) sources resolve:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) + @end diff --git a/ios/FasterImageViewManager.swift b/ios/FasterImageViewManager.swift index a8dee30..79d54e6 100644 --- a/ios/FasterImageViewManager.swift +++ b/ios/FasterImageViewManager.swift @@ -21,6 +21,18 @@ final class FasterImageViewManager: RCTViewManager { } } } + + @objc + func prefetch(_ sources: [String], + resolve: @escaping RCTPromiseResolveBlock, + reject: @escaping RCTPromiseRejectBlock) { + do { + let prefetcher = ImagePrefetcher() + let urls = sources.map { url in URL(string: url )}.compactMap{ $0 } + prefetcher.startPrefetching(with: urls) + resolve(true) + } catch { reject() } + } } struct ImageOptions: Decodable { diff --git a/src/index.tsx b/src/index.tsx index bb203a8..0ff6aae 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,9 +1,9 @@ import { + ColorValue, ImageStyle, - requireNativeComponent, NativeModules, Platform, - ColorValue, + requireNativeComponent, } from 'react-native'; export type IOSImageResizeMode = @@ -130,3 +130,13 @@ export const clearCache = async () => { return FasterImageModule.clearCache(); } }; + +export const prefetch(sources: string[]): Promise { + if (Platform.OS === 'ios') { + const { FasterImageViewManager } = NativeModules; + return FasterImageViewManager.prefetch(sources); + } else { + const { FasterImageModule } = NativeModules; + return FasterImageModule.prefetch(sources); + } +} \ No newline at end of file