mirror of
https://github.com/status-im/react-native.git
synced 2025-01-14 19:44:13 +00:00
Fabric: Managing LocalData
instances in mounting pipeline
Summary: Managing and transmitting LocalData object to native views. Reviewed By: mdvacca Differential Revision: D7738580 fbshipit-source-id: c889da58d3afe7ac14f411576afe659bd079f641
This commit is contained in:
parent
368388bfc8
commit
9f46f425f4
@ -0,0 +1,27 @@
|
|||||||
|
/**
|
||||||
|
* 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/RCTMountItemProtocol.h>
|
||||||
|
#import <React/RCTPrimitives.h>
|
||||||
|
#import <fabric/core/LocalData.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates local data of a component view.
|
||||||
|
*/
|
||||||
|
@interface RCTUpdateLocalDataMountItem : NSObject <RCTMountItemProtocol>
|
||||||
|
|
||||||
|
- (instancetype)initWithTag:(ReactTag)tag
|
||||||
|
oldLocalData:(facebook::react::SharedLocalData)oldLocalData
|
||||||
|
newLocalData:(facebook::react::SharedLocalData)newLocalData;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
@ -0,0 +1,39 @@
|
|||||||
|
/**
|
||||||
|
* 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 "RCTUpdateLocalDataMountItem.h"
|
||||||
|
|
||||||
|
#import "RCTComponentViewRegistry.h"
|
||||||
|
|
||||||
|
using namespace facebook::react;
|
||||||
|
|
||||||
|
@implementation RCTUpdateLocalDataMountItem {
|
||||||
|
ReactTag _tag;
|
||||||
|
SharedLocalData _oldLocalData;
|
||||||
|
SharedLocalData _newLocalData;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)initWithTag:(ReactTag)tag
|
||||||
|
oldLocalData:(facebook::react::SharedLocalData)oldLocalData
|
||||||
|
newLocalData:(facebook::react::SharedLocalData)newLocalData
|
||||||
|
{
|
||||||
|
if (self = [super init]) {
|
||||||
|
_tag = tag;
|
||||||
|
_oldLocalData = oldLocalData;
|
||||||
|
_newLocalData = newLocalData;
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)executeWithRegistry:(RCTComponentViewRegistry *)registry
|
||||||
|
{
|
||||||
|
UIView<RCTComponentViewProtocol> *componentView = [registry componentViewByTag:_tag];
|
||||||
|
[componentView updateLocalData:_newLocalData oldLocalData:_oldLocalData];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
#import <fabric/core/LocalData.h>
|
||||||
#import <fabric/core/Props.h>
|
#import <fabric/core/Props.h>
|
||||||
#import <fabric/core/LayoutMetrics.h>
|
#import <fabric/core/LayoutMetrics.h>
|
||||||
#import <React/RCTPrimitives.h>
|
#import <React/RCTPrimitives.h>
|
||||||
@ -44,6 +45,14 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
- (void)updateProps:(facebook::react::SharedProps)props
|
- (void)updateProps:(facebook::react::SharedProps)props
|
||||||
oldProps:(facebook::react::SharedProps)oldProps;
|
oldProps:(facebook::react::SharedProps)oldProps;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Called for updating component's local data.
|
||||||
|
* Receiver must update native view props accordingly changed local data.
|
||||||
|
*/
|
||||||
|
- (void)updateLocalData:(facebook::react::SharedLocalData)localData
|
||||||
|
oldLocalData:(facebook::react::SharedLocalData)oldLocalData;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called for updating component's layout metrics.
|
* Called for updating component's layout metrics.
|
||||||
* Receiver must update `UIView` layout-related fields (such as `frame`,
|
* Receiver must update `UIView` layout-related fields (such as `frame`,
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#import "RCTInsertMountItem.h"
|
#import "RCTInsertMountItem.h"
|
||||||
#import "RCTRemoveMountItem.h"
|
#import "RCTRemoveMountItem.h"
|
||||||
#import "RCTUpdatePropsMountItem.h"
|
#import "RCTUpdatePropsMountItem.h"
|
||||||
|
#import "RCTUpdateLocalDataMountItem.h"
|
||||||
#import "RCTUpdateLayoutMetricsMountItem.h"
|
#import "RCTUpdateLayoutMetricsMountItem.h"
|
||||||
|
|
||||||
using namespace facebook::react;
|
using namespace facebook::react;
|
||||||
@ -74,6 +75,13 @@ using namespace facebook::react;
|
|||||||
oldProps:nullptr
|
oldProps:nullptr
|
||||||
newProps:instruction.getNewChildNode()->getProps()]];
|
newProps:instruction.getNewChildNode()->getProps()]];
|
||||||
|
|
||||||
|
// LocalData
|
||||||
|
if (instruction.getNewChildNode()->getLocalData()) {
|
||||||
|
[mountItems addObject:[[RCTUpdateLocalDataMountItem alloc] initWithTag:instruction.getNewChildNode()->getTag()
|
||||||
|
oldLocalData:nullptr
|
||||||
|
newLocalData:instruction.getNewChildNode()->getLocalData()]];
|
||||||
|
}
|
||||||
|
|
||||||
// Layout
|
// Layout
|
||||||
SharedLayoutableShadowNode layoutableNewShadowNode =
|
SharedLayoutableShadowNode layoutableNewShadowNode =
|
||||||
std::dynamic_pointer_cast<const LayoutableShadowNode>(instruction.getNewChildNode());
|
std::dynamic_pointer_cast<const LayoutableShadowNode>(instruction.getNewChildNode());
|
||||||
@ -108,6 +116,15 @@ using namespace facebook::react;
|
|||||||
[mountItems addObject:mountItem];
|
[mountItems addObject:mountItem];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LocalData
|
||||||
|
if (oldShadowNode->getLocalData() != newShadowNode->getLocalData()) {
|
||||||
|
RCTUpdateLocalDataMountItem *mountItem =
|
||||||
|
[[RCTUpdateLocalDataMountItem alloc] initWithTag:newShadowNode->getTag()
|
||||||
|
oldLocalData:oldShadowNode->getLocalData()
|
||||||
|
newLocalData:newShadowNode->getLocalData()];
|
||||||
|
[mountItems addObject:mountItem];
|
||||||
|
}
|
||||||
|
|
||||||
// Layout
|
// Layout
|
||||||
SharedLayoutableShadowNode layoutableOldShadowNode =
|
SharedLayoutableShadowNode layoutableOldShadowNode =
|
||||||
std::dynamic_pointer_cast<const LayoutableShadowNode>(oldShadowNode);
|
std::dynamic_pointer_cast<const LayoutableShadowNode>(oldShadowNode);
|
||||||
|
@ -25,6 +25,9 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
- (void)updateProps:(facebook::react::SharedProps)props
|
- (void)updateProps:(facebook::react::SharedProps)props
|
||||||
oldProps:(facebook::react::SharedProps)oldProps;
|
oldProps:(facebook::react::SharedProps)oldProps;
|
||||||
|
|
||||||
|
- (void)updateLocalData:(facebook::react::SharedLocalData)localData
|
||||||
|
oldLocalData:(facebook::react::SharedLocalData)oldLocalData;
|
||||||
|
|
||||||
- (void)updateLayoutMetrics:(facebook::react::LayoutMetrics)layoutMetrics
|
- (void)updateLayoutMetrics:(facebook::react::LayoutMetrics)layoutMetrics
|
||||||
oldLayoutMetrics:(facebook::react::LayoutMetrics)oldLayoutMetrics;
|
oldLayoutMetrics:(facebook::react::LayoutMetrics)oldLayoutMetrics;
|
||||||
|
|
||||||
|
@ -30,6 +30,12 @@
|
|||||||
// Default implementation does nothing.
|
// Default implementation does nothing.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)updateLocalData:(facebook::react::SharedLocalData)localData
|
||||||
|
oldLocalData:(facebook::react::SharedLocalData)oldLocalData
|
||||||
|
{
|
||||||
|
// Default implementation does nothing.
|
||||||
|
}
|
||||||
|
|
||||||
- (void)updateLayoutMetrics:(facebook::react::LayoutMetrics)layoutMetrics
|
- (void)updateLayoutMetrics:(facebook::react::LayoutMetrics)layoutMetrics
|
||||||
oldLayoutMetrics:(facebook::react::LayoutMetrics)oldLayoutMetrics
|
oldLayoutMetrics:(facebook::react::LayoutMetrics)oldLayoutMetrics
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user