mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
1e9f63fe27
Summary: The standard merge_patch (aka RFC7386) mechanism that we used before removes the key-value pairs from the original object in case if the patch has a `null` value. And we don't need it there because we should pass this null value down to the mounting layer to clean up this prop there. Besides that, the patch should not be recursive because props are not divisible. Changelog: [Internal] Fabric-specific internal change. Reviewed By: sammy-SC Differential Revision: D26435620 fbshipit-source-id: 0d7612c6ca04dcbc122ff6add3777674e3868af8
44 lines
1.1 KiB
C++
44 lines
1.1 KiB
C++
/*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#include "LegacyViewManagerInteropViewProps.h"
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
static folly::dynamic mergeRawProps(
|
|
folly::dynamic const &source,
|
|
folly::dynamic const &patch) {
|
|
auto result = source;
|
|
|
|
if (!result.isObject()) {
|
|
result = folly::dynamic::object();
|
|
}
|
|
|
|
if (!patch.isObject()) {
|
|
return result;
|
|
}
|
|
|
|
// Note, here we have to preserve sub-prop objects with `null` value as
|
|
// an indication for the legacy mounting layer that it needs to clean them up.
|
|
for (auto const &pair : patch.items()) {
|
|
result[pair.first] = pair.second;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
LegacyViewManagerInteropViewProps::LegacyViewManagerInteropViewProps(
|
|
const LegacyViewManagerInteropViewProps &sourceProps,
|
|
const RawProps &rawProps)
|
|
: ViewProps(sourceProps, rawProps),
|
|
otherProps(
|
|
mergeRawProps(sourceProps.otherProps, (folly::dynamic)rawProps)) {}
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|