Files
react-native/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropViewProps.cpp
T
Valentin Shergin 1e9f63fe27 Fabric: Fixed a prop application bug in LegacyViewManagerInterop
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
2021-02-12 16:51:43 -08:00

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