mirror of
https://github.com/status-im/react-native.git
synced 2025-02-04 21:53:30 +00:00
Fabric: Default implementation of RCTComponentViewProtocol
Summary: All methods of RCTComponentViewProtocol are non-optional, but this default implementation removes necessity to implement all of them manually. Reviewed By: mdvacca Differential Revision: D7507522 fbshipit-source-id: e4dff97e8bf64e79d2f1ffca94f0549bd4b5e2fa
This commit is contained in:
parent
87539c34db
commit
dfb8fd26e6
35
React/Fabric/Mounting/UIView+ComponentViewProtocol.h
Normal file
35
React/Fabric/Mounting/UIView+ComponentViewProtocol.h
Normal file
@ -0,0 +1,35 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
#import <React/RCTComponentViewProtocol.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
/**
|
||||
* Default implementation of RCTComponentViewProtocol.
|
||||
*/
|
||||
@interface UIView (ComponentViewProtocol)
|
||||
|
||||
- (void)mountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView
|
||||
index:(NSInteger)index;
|
||||
|
||||
- (void)unmountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView
|
||||
index:(NSInteger)index;
|
||||
|
||||
- (void)updateProps:(facebook::react::SharedProps)props
|
||||
oldProps:(facebook::react::SharedProps)oldProps;
|
||||
|
||||
- (void)updateLayoutMetrics:(facebook::react::LayoutMetrics)layoutMetrics
|
||||
oldLayoutMetrics:(facebook::react::LayoutMetrics)oldLayoutMetrics;
|
||||
|
||||
- (void)prepareForRecycle;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
57
React/Fabric/Mounting/UIView+ComponentViewProtocol.mm
Normal file
57
React/Fabric/Mounting/UIView+ComponentViewProtocol.mm
Normal file
@ -0,0 +1,57 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#import "UIView+ComponentViewProtocol.h"
|
||||
|
||||
#import <React/RCTAssert.h>
|
||||
|
||||
@implementation UIView (ComponentViewProtocol)
|
||||
|
||||
- (void)mountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView
|
||||
index:(NSInteger)index
|
||||
{
|
||||
[self insertSubview:childComponentView atIndex:index];
|
||||
}
|
||||
|
||||
- (void)unmountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView
|
||||
index:(NSInteger)index
|
||||
{
|
||||
RCTAssert(childComponentView.superview == self, @"Attempt to unmount improperly mounted component view.");
|
||||
[childComponentView removeFromSuperview];
|
||||
}
|
||||
|
||||
- (void)updateProps:(facebook::react::SharedProps)props
|
||||
oldProps:(facebook::react::SharedProps)oldProps
|
||||
{
|
||||
// Default implementation does nothing.
|
||||
}
|
||||
|
||||
- (void)updateLayoutMetrics:(facebook::react::LayoutMetrics)layoutMetrics
|
||||
oldLayoutMetrics:(facebook::react::LayoutMetrics)oldLayoutMetrics
|
||||
{
|
||||
if (layoutMetrics.frame != oldLayoutMetrics.frame) {
|
||||
self.frame = {
|
||||
.origin = {
|
||||
.x = layoutMetrics.frame.origin.x,
|
||||
.y = layoutMetrics.frame.origin.y
|
||||
},
|
||||
.size = {
|
||||
.width = layoutMetrics.frame.size.width,
|
||||
.height = layoutMetrics.frame.size.height
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// TODO: Apply another layout metrics here.
|
||||
}
|
||||
|
||||
- (void)prepareForRecycle
|
||||
{
|
||||
// Default implementation does nothing.
|
||||
}
|
||||
|
||||
@end
|
Loading…
x
Reference in New Issue
Block a user