@@ -82,9 +82,18 @@ - (void) sendOnLoad: (UIImage*)image {
82
82
@" width" : [NSNumber numberWithDouble: image.size.width],
83
83
@" height" : [NSNumber numberWithDouble: image.size.height]
84
84
};
85
+ // all the setters of RCTDirectEventBlock aren't called on Fabric so we don't
86
+ // need the logic of checking if the values are there already etc
87
+ #ifdef RCT_NEW_ARCH_ENABLED
88
+ if (_eventEmitter != nullptr ) {
89
+ std::dynamic_pointer_cast<const facebook::react::FastImageViewEventEmitter>(_eventEmitter)
90
+ ->onFastImageLoad (facebook::react::FastImageViewEventEmitter::OnFastImageLoad{.width = image.size .width , .height = image.size .height });
91
+ }
92
+ #else
85
93
if (self.onFastImageLoad ) {
86
94
self.onFastImageLoad (self.onLoadEvent );
87
95
}
96
+ #endif
88
97
}
89
98
90
99
- (void ) setSource : (FFFastImageSource*)source {
@@ -114,27 +123,48 @@ - (void) reloadImage {
114
123
// Load base64 images.
115
124
NSString * url = [_source.url absoluteString ];
116
125
if (url && [url hasPrefix: @" data:image" ]) {
126
+ #ifdef RCT_NEW_ARCH_ENABLED
127
+ if (_eventEmitter != nullptr ) {
128
+ std::dynamic_pointer_cast<const facebook::react::FastImageViewEventEmitter>(_eventEmitter)
129
+ ->onFastImageLoadStart (facebook::react::FastImageViewEventEmitter::OnFastImageLoadStart{});
130
+ }
131
+ #else
117
132
if (self.onFastImageLoadStart ) {
118
133
self.onFastImageLoadStart (@{});
119
134
self.hasSentOnLoadStart = YES ;
120
135
} else {
121
136
self.hasSentOnLoadStart = NO ;
122
137
}
138
+ #endif
123
139
// Use SDWebImage API to support external format like WebP images
124
140
UIImage* image = [UIImage sd_imageWithData: [NSData dataWithContentsOfURL: _source.url]];
125
141
[self setImage: image];
142
+ #ifdef RCT_NEW_ARCH_ENABLED
143
+ if (_eventEmitter != nullptr ) {
144
+ std::dynamic_pointer_cast<const facebook::react::FastImageViewEventEmitter>(_eventEmitter)
145
+ ->onFastImageProgress (facebook::react::FastImageViewEventEmitter::OnFastImageProgress{.loaded = 1 , .total = 1 });
146
+ }
147
+ #else
126
148
if (self.onFastImageProgress ) {
127
149
self.onFastImageProgress (@{
128
150
@" loaded" : @(1 ),
129
151
@" total" : @(1 )
130
152
});
131
153
}
154
+ #endif
132
155
self.hasCompleted = YES ;
133
156
[self sendOnLoad: image];
134
157
158
+ #ifdef RCT_NEW_ARCH_ENABLED
159
+ if (_eventEmitter != nullptr ) {
160
+ std::dynamic_pointer_cast<const facebook::react::FastImageViewEventEmitter>(_eventEmitter)
161
+ ->onFastImageLoadEnd (facebook::react::FastImageViewEventEmitter::OnFastImageLoadEnd{});
162
+ }
163
+ #else
135
164
if (self.onFastImageLoadEnd ) {
136
165
self.onFastImageLoadEnd (@{});
137
166
}
167
+ #endif
138
168
return ;
139
169
}
140
170
@@ -175,12 +205,19 @@ - (void) reloadImage {
175
205
break ;
176
206
}
177
207
208
+ #ifdef RCT_NEW_ARCH_ENABLED
209
+ if (_eventEmitter != nullptr ) {
210
+ std::dynamic_pointer_cast<const facebook::react::FastImageViewEventEmitter>(_eventEmitter)
211
+ ->onFastImageLoadStart (facebook::react::FastImageViewEventEmitter::OnFastImageLoadStart{});
212
+ }
213
+ #else
178
214
if (self.onFastImageLoadStart ) {
179
215
self.onFastImageLoadStart (@{});
180
216
self.hasSentOnLoadStart = YES ;
181
217
} else {
182
218
self.hasSentOnLoadStart = NO ;
183
219
}
220
+ #endif
184
221
self.hasCompleted = NO ;
185
222
self.hasErrored = NO ;
186
223
@@ -191,36 +228,66 @@ - (void) reloadImage {
191
228
}
192
229
193
230
- (void ) downloadImage : (FFFastImageSource*)source options : (SDWebImageOptions)options context : (SDWebImageContext*)context {
194
- __weak typeof (self) weakSelf = self; // Always use a weak reference to self in blocks
231
+ __weak FFFastImageView * weakSelf = self; // Always use a weak reference to self in blocks
195
232
[self sd_setImageWithURL: _source.url
196
233
placeholderImage: _defaultSource
197
234
options: options
198
235
context: context
199
236
progress: ^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
200
- if (weakSelf.onFastImageProgress ) {
237
+ #ifdef RCT_NEW_ARCH_ENABLED
238
+ if (weakSelf.eventEmitter != nullptr ) {
239
+ std::dynamic_pointer_cast<const facebook::react::FastImageViewEventEmitter>(weakSelf.eventEmitter )
240
+ ->onFastImageProgress (facebook::react::FastImageViewEventEmitter::OnFastImageProgress{.loaded = static_cast <int >(receivedSize), .total = static_cast <int >(expectedSize)});
241
+ }
242
+ #else
243
+ if (weakSelf.onFastImageProgress ) {
201
244
weakSelf.onFastImageProgress (@{
202
245
@" loaded" : @(receivedSize),
203
246
@" total" : @(expectedSize)
204
247
});
205
248
}
249
+ #endif
250
+
206
251
} completed: ^(UIImage* _Nullable image,
207
252
NSError * _Nullable error,
208
253
SDImageCacheType cacheType,
209
254
NSURL * _Nullable imageURL) {
210
255
if (error) {
211
256
weakSelf.hasErrored = YES ;
257
+ #ifdef RCT_NEW_ARCH_ENABLED
258
+ if (weakSelf.eventEmitter != nullptr ) {
259
+ std::dynamic_pointer_cast<const facebook::react::FastImageViewEventEmitter>(weakSelf.eventEmitter )
260
+ ->onFastImageError (facebook::react::FastImageViewEventEmitter::OnFastImageError{});
261
+ }
262
+ #else
212
263
if (weakSelf.onFastImageError ) {
213
264
weakSelf.onFastImageError (@{});
214
265
}
266
+ #endif
267
+
268
+ #ifdef RCT_NEW_ARCH_ENABLED
269
+ if (weakSelf.eventEmitter != nullptr ) {
270
+ std::dynamic_pointer_cast<const facebook::react::FastImageViewEventEmitter>(weakSelf.eventEmitter )
271
+ ->onFastImageLoadEnd (facebook::react::FastImageViewEventEmitter::OnFastImageLoadEnd{});
272
+ }
273
+ #else
215
274
if (weakSelf.onFastImageLoadEnd ) {
216
275
weakSelf.onFastImageLoadEnd (@{});
217
276
}
277
+ #endif
218
278
} else {
219
279
weakSelf.hasCompleted = YES ;
220
280
[weakSelf sendOnLoad: image];
281
+ #ifdef RCT_NEW_ARCH_ENABLED
282
+ if (weakSelf.eventEmitter != nullptr ) {
283
+ std::dynamic_pointer_cast<const facebook::react::FastImageViewEventEmitter>(weakSelf.eventEmitter )
284
+ ->onFastImageLoadEnd (facebook::react::FastImageViewEventEmitter::OnFastImageLoadEnd{});
285
+ }
286
+ #else
221
287
if (weakSelf.onFastImageLoadEnd ) {
222
288
weakSelf.onFastImageLoadEnd (@{});
223
289
}
290
+ #endif
224
291
}
225
292
}];
226
293
}
0 commit comments