mirror of
https://github.com/status-im/react-native.git
synced 2025-02-06 06:34:01 +00:00
Summary: Now that we no longer have a separate NetworkImageView implementation, we can remove that code path from Image.js I've also moved the prefetch method into RCTImageViewManager for consistency with the getImageSize method, which means we no longer need to export the RCTImageLoader module to js. Reviewed By: javache Differential Revision: D3398157 fbshipit-source-id: fbbcf90a61549831ad28bad0cb3b50c375aae32c
81 lines
3.0 KiB
Objective-C
81 lines
3.0 KiB
Objective-C
/**
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*/
|
|
|
|
#import "RCTImageViewManager.h"
|
|
|
|
#import <UIKit/UIKit.h>
|
|
|
|
#import "RCTConvert.h"
|
|
#import "RCTImageLoader.h"
|
|
#import "RCTImageSource.h"
|
|
#import "RCTImageView.h"
|
|
|
|
@implementation RCTImageViewManager
|
|
|
|
RCT_EXPORT_MODULE()
|
|
|
|
- (UIView *)view
|
|
{
|
|
return [[RCTImageView alloc] initWithBridge:self.bridge];
|
|
}
|
|
|
|
RCT_EXPORT_VIEW_PROPERTY(blurRadius, CGFloat)
|
|
RCT_EXPORT_VIEW_PROPERTY(capInsets, UIEdgeInsets)
|
|
RCT_REMAP_VIEW_PROPERTY(defaultSource, defaultImage, UIImage)
|
|
RCT_EXPORT_VIEW_PROPERTY(onLoadStart, RCTDirectEventBlock)
|
|
RCT_EXPORT_VIEW_PROPERTY(onProgress, RCTDirectEventBlock)
|
|
RCT_EXPORT_VIEW_PROPERTY(onError, RCTDirectEventBlock)
|
|
RCT_EXPORT_VIEW_PROPERTY(onLoad, RCTDirectEventBlock)
|
|
RCT_EXPORT_VIEW_PROPERTY(onLoadEnd, RCTDirectEventBlock)
|
|
RCT_REMAP_VIEW_PROPERTY(resizeMode, contentMode, RCTResizeMode)
|
|
RCT_EXPORT_VIEW_PROPERTY(source, RCTImageSource)
|
|
RCT_CUSTOM_VIEW_PROPERTY(tintColor, UIColor, RCTImageView)
|
|
{
|
|
// Default tintColor isn't nil - it's inherited from the superView - but we
|
|
// want to treat a null json value for `tintColor` as meaning 'disable tint',
|
|
// so we toggle `renderingMode` here instead of in `-[RCTImageView setTintColor:]`
|
|
view.tintColor = [RCTConvert UIColor:json] ?: defaultView.tintColor;
|
|
view.renderingMode = json ? UIImageRenderingModeAlwaysTemplate : defaultView.renderingMode;
|
|
}
|
|
|
|
RCT_EXPORT_METHOD(getSize:(NSURLRequest *)request
|
|
successBlock:(RCTResponseSenderBlock)successBlock
|
|
errorBlock:(RCTResponseErrorBlock)errorBlock)
|
|
{
|
|
[self.bridge.imageLoader getImageSizeForURLRequest:request
|
|
block:^(NSError *error, CGSize size) {
|
|
if (error) {
|
|
errorBlock(error);
|
|
} else {
|
|
successBlock(@[@(size.width), @(size.height)]);
|
|
}
|
|
}];
|
|
}
|
|
|
|
RCT_EXPORT_METHOD(prefetchImage:(NSURLRequest *)request
|
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
reject:(RCTPromiseRejectBlock)reject)
|
|
{
|
|
if (!request) {
|
|
reject(@"E_INVALID_URI", @"Cannot prefetch an image for an empty URI", nil);
|
|
return;
|
|
}
|
|
|
|
[self.bridge.imageLoader loadImageWithURLRequest:request
|
|
callback:^(NSError *error, UIImage *image) {
|
|
if (error) {
|
|
reject(@"E_PREFETCH_FAILURE", nil, error);
|
|
return;
|
|
}
|
|
resolve(@YES);
|
|
}];
|
|
}
|
|
|
|
@end
|