Generic solution for live editing

Summary: Preparation for making components live editable

Reviewed By: kevin0571

Differential Revision: D16379961

fbshipit-source-id: d0ea3d753eb588fe7b55f2345124427b4a5a58b5
This commit is contained in:
Roman Gorbunov
2019-07-25 03:59:05 -07:00
committed by Facebook Github Bot
parent cb374ffccd
commit f2bc5d3fb2
7 changed files with 139 additions and 14 deletions

View File

@@ -213,11 +213,13 @@
NSString *dotJoinedPath = [path componentsJoinedByString: @"."];
SKNodeUpdateData updateDataForPath = [[descriptor dataMutationsForNode: node] objectForKey: dotJoinedPath];
if (updateDataForPath != nil) {
const auto identifierForInvalidation = [descriptor identifierForInvalidation:node];
id nodeForInvalidation = [_trackedObjects objectForKey:identifierForInvalidation];
SKNodeDescriptor *descriptorForInvalidation = [_descriptorMapper descriptorForClass:[nodeForInvalidation class]];
NSMutableArray *children = [self getChildrenForNode:nodeForInvalidation withDescriptor:descriptorForInvalidation];
updateDataForPath(value);
NSMutableArray *children = [self getChildrenForNode:node withDescriptor:descriptor];
[connection send: @"invalidate" withParams: @{
@"nodes": @[@{@"id": [descriptor identifierForNode: node], @"children": children}]
@"nodes": @[@{@"id": [descriptorForInvalidation identifierForNode: nodeForInvalidation], @"children": children}]
}];
}
}
@@ -446,9 +448,7 @@
return nil;
}
if (! [_trackedObjects objectForKey: objectIdentifier]) {
[_trackedObjects setObject:object forKey:objectIdentifier];
}
[_trackedObjects setObject:object forKey:objectIdentifier];
return objectIdentifier;
}

View File

@@ -43,6 +43,12 @@ typedef void (^SKNodeUpdateData)(id value);
*/
- (NSString *)identifierForNode:(T)node;
/**
An ID which is equal between reflowing components is needed to get the identifier of root
node of a tree which need to be invalidated on FlipperKitLayoutPlugin side.
*/
- (NSString *)identifierForInvalidation:(T)node;
/**
The name used to identify this node in the Sonar desktop application. This is what
will be visible in the hierarchy.

View File

@@ -33,6 +33,11 @@
@throw [NSString stringWithFormat:@"need to implement %@", NSStringFromSelector(_cmd)];
}
- (NSString *)identifierForInvalidation:(id)node
{
return [self identifierForNode:node];
}
- (NSString *)nameForNode:(id)node {
return NSStringFromClass([node class]);
}