mirror of
https://github.com/status-im/react-native.git
synced 2025-01-10 01:25:39 +00:00
48af214216
Summary: Our events all follow a common pattern, so there's no good reason why the configuration should be so verbose. This diff eliminates that redundancy, and gives us the freedom to simplify the underlying mechanism in future without further churning the call sites.
115 lines
4.3 KiB
Objective-C
115 lines
4.3 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 <UIKit/UIKit.h>
|
|
|
|
#import "RCTBridgeModule.h"
|
|
#import "RCTConvert.h"
|
|
#import "RCTLog.h"
|
|
|
|
@class RCTBridge;
|
|
@class RCTEventDispatcher;
|
|
@class RCTShadowView;
|
|
@class RCTSparseArray;
|
|
@class RCTUIManager;
|
|
|
|
typedef void (^RCTViewManagerUIBlock)(RCTUIManager *uiManager, RCTSparseArray *viewRegistry);
|
|
|
|
@interface RCTViewManager : NSObject <RCTBridgeModule>
|
|
|
|
/**
|
|
* The bridge can be used to access both the RCTUIIManager and the RCTEventDispatcher,
|
|
* allowing the manager (or the views that it manages) to manipulate the view
|
|
* hierarchy and send events back to the JS context.
|
|
*/
|
|
@property (nonatomic, weak) RCTBridge *bridge;
|
|
|
|
/**
|
|
* This method instantiates a native view to be managed by the module. Override
|
|
* this to return a custom view instance, which may be preconfigured with default
|
|
* properties, subviews, etc. This method will be called many times, and should
|
|
* return a fresh instance each time. The view module MUST NOT cache the returned
|
|
* view and return the same instance for subsequent calls.
|
|
*/
|
|
- (UIView *)view;
|
|
|
|
/**
|
|
* This method instantiates a shadow view to be managed by the module. If omitted,
|
|
* an ordinary RCTShadowView instance will be created, which is typically fine for
|
|
* most view types. As with the -view method, the -shadowView method should return
|
|
* a fresh instance each time it is called.
|
|
*/
|
|
- (RCTShadowView *)shadowView;
|
|
|
|
/**
|
|
* Returns an array of names of events that can be sent by native views. This
|
|
* should return bubbling, directly-dispatched event types. The event name
|
|
* should not include a prefix such as 'on' or 'top', as this will be applied
|
|
* as needed. When subscribing to the event, use the 'Captured' suffix to
|
|
* indicate the captured form, or omit the suffix for the bubbling form.
|
|
*
|
|
* Note that this method is not inherited when you subclass a view module, and
|
|
* you should not call [super customBubblingEventTypes] when overriding it.
|
|
*/
|
|
- (NSArray *)customBubblingEventTypes;
|
|
|
|
/**
|
|
* Returns an array of names of events that can be sent by native views. This
|
|
* should return non-bubbling, directly-dispatched event types. The event name
|
|
* should not include a prefix such as 'on' or 'top', as this will be applied
|
|
* as needed.
|
|
*
|
|
* Note that this method is not inherited when you subclass a view module, and
|
|
* you should not call [super customDirectEventTypes] when overriding it.
|
|
*/
|
|
- (NSArray *)customDirectEventTypes;
|
|
|
|
/**
|
|
* Called to notify manager that layout has finished, in case any calculated
|
|
* properties need to be copied over from shadow view to view.
|
|
*/
|
|
- (RCTViewManagerUIBlock)uiBlockToAmendWithShadowView:(RCTShadowView *)shadowView;
|
|
|
|
/**
|
|
* Called after view hierarchy manipulation has finished, and all shadow props
|
|
* have been set, but before layout has been performed. Useful for performing
|
|
* custo layout logic or tasks that involve walking the view hierarchy.
|
|
* To be deprecated, hopefully.
|
|
*/
|
|
- (RCTViewManagerUIBlock)uiBlockToAmendWithShadowViewRegistry:(RCTSparseArray *)shadowViewRegistry;
|
|
|
|
/**
|
|
* This handles the simple case, where JS and native property names match.
|
|
*/
|
|
#define RCT_EXPORT_VIEW_PROPERTY(name, type) \
|
|
+ (NSArray *)propConfig_##name { return @[@#type]; }
|
|
|
|
/**
|
|
* This macro maps a named property to an arbitrary key path in the view.
|
|
*/
|
|
#define RCT_REMAP_VIEW_PROPERTY(name, keyPath, type) \
|
|
+ (NSArray *)propConfig_##name { return @[@#type, @#keyPath]; }
|
|
|
|
/**
|
|
* This macro can be used when you need to provide custom logic for setting
|
|
* view properties. The macro should be followed by a method body, which can
|
|
* refer to "json", "view" and "defaultView" to implement the required logic.
|
|
*/
|
|
#define RCT_CUSTOM_VIEW_PROPERTY(name, type, viewClass) \
|
|
RCT_REMAP_VIEW_PROPERTY(name, __custom__, type) \
|
|
- (void)set_##name:(id)json forView:(viewClass *)view withDefaultView:(viewClass *)defaultView
|
|
|
|
/**
|
|
* This macro is used to map properties to the shadow view, instead of the view.
|
|
*/
|
|
#define RCT_EXPORT_SHADOW_PROPERTY(name, type) \
|
|
+ (NSArray *)propConfigShadow_##name { return @[@#type]; }
|
|
|
|
@end
|