Skip to content

Commit 906ce4e

Browse files
committed
refactor: clean up ShadowTreeUpdateManager 2/n
1 parent e9c5e99 commit 906ce4e

2 files changed

Lines changed: 25 additions & 25 deletions

File tree

cpp/ShadowTreeUpdateManager.cpp

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,19 @@
1313
#include <string>
1414
#include <cctype>
1515
#include <react/renderer/uimanager/UIManagerBinding.h>
16+
#include <cassert>
1617

1718
namespace margelo::nitro::cssnitro {
1819

1920
using jsi::Runtime;
2021
using reactnativecss::Observable;
2122
namespace nitro_ns = ::margelo::nitro;
2223

23-
namespace {
24-
bool containsColorInsensitive(const std::string &key) {
24+
ShadowTreeUpdateManager::ShadowTreeUpdateManager() = default;
25+
26+
struct VariantConverter {
27+
private:
28+
static bool containsColorInsensitive(const std::string &key) {
2529
if (key.size() < 5) return false;
2630
std::string lower;
2731
lower.reserve(key.size());
@@ -30,9 +34,8 @@ namespace margelo::nitro::cssnitro {
3034
static_cast<char>(::tolower(static_cast<unsigned char>(c))));
3135
return lower.find("color") != std::string::npos;
3236
}
33-
}
3437

35-
struct VariantConverter {
38+
public:
3639
static folly::dynamic convert(ShadowTreeUpdateManager &self,
3740
Runtime &runtime,
3841
const nitro_ns::VariantType &var) {
@@ -72,26 +75,25 @@ namespace margelo::nitro::cssnitro {
7275
},
7376
var);
7477
}
75-
};
7678

77-
// Convert a single style entry (AnyMap) into an update object, applying color processing only for keys containing "color"
78-
folly::dynamic ShadowTreeUpdateManager::styleEntryToUpdate(Runtime &runtime,
79-
const nitro_ns::AnyMap &entry) {
80-
folly::dynamic obj = folly::dynamic::object();
81-
const auto &map = entry.getMap();
82-
for (const auto &kv: map) {
83-
const auto &var = static_cast<const nitro_ns::VariantType &>(kv.second);
84-
auto dynVal = VariantConverter::convert(*this, runtime, var);
85-
if (containsColorInsensitive(kv.first)) {
86-
obj[kv.first] = processColorDynamic(runtime, dynVal);
87-
} else {
88-
obj[kv.first] = std::move(dynVal);
79+
// Overload: convert an AnyMap directly (top-level style entry)
80+
static folly::dynamic convert(ShadowTreeUpdateManager &self,
81+
Runtime &runtime,
82+
const nitro_ns::AnyMap &entry) {
83+
folly::dynamic obj = folly::dynamic::object();
84+
// Iterate key-value pairs from AnyMap
85+
for (const auto &kv: entry.getMap()) {
86+
const auto &v = static_cast<const nitro_ns::VariantType &>(kv.second);
87+
auto dynVal = convert(self, runtime, v);
88+
if (containsColorInsensitive(kv.first)) {
89+
obj[kv.first] = self.processColorDynamic(runtime, dynVal);
90+
} else {
91+
obj[kv.first] = std::move(dynVal);
92+
}
8993
}
94+
return obj;
9095
}
91-
return obj;
92-
}
93-
94-
ShadowTreeUpdateManager::ShadowTreeUpdateManager() = default;
96+
};
9597

9698
void ShadowTreeUpdateManager::linkComponent(Runtime &runtime,
9799
const std::string &componentId,
@@ -125,7 +127,7 @@ namespace margelo::nitro::cssnitro {
125127
if (!p) {
126128
continue;
127129
}
128-
auto obj = styleEntryToUpdate(*link.runtime, *p);
130+
auto obj = VariantConverter::convert(*this, *link.runtime, *p);
129131
if (obj.isObject()) {
130132
for (auto &kv: obj.items()) {
131133
payload[kv.first] = std::move(kv.second);

cpp/ShadowTreeUpdateManager.hpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,7 @@ namespace margelo {
7676
folly::dynamic
7777
processColorDynamic(jsi::Runtime &runtime, const folly::dynamic &value);
7878

79-
// Convert a single style entry (AnyMap) into an update object, applying color processing to string values for keys containing "color"
80-
folly::dynamic
81-
styleEntryToUpdate(jsi::Runtime &runtime, const ::margelo::nitro::AnyMap &entry);
79+
// styleEntryToUpdate was inlined into addUpdates
8280
};
8381

8482
}

0 commit comments

Comments
 (0)