react-native-unistyles 3.0.0-alpha.11 → 3.0.0-alpha.13
Sign up to get free protection for your applications and to get access to all the features.
- package/cxx/core/HostStyle.h +1 -1
- package/cxx/core/UnistylesCommitHook.cpp +10 -5
- package/cxx/core/UnistylesCommitHook.h +4 -2
- package/cxx/core/UnistylesMountHook.cpp +18 -5
- package/cxx/core/UnistylesMountHook.h +3 -2
- package/cxx/core/UnistylesRegistry.cpp +19 -14
- package/cxx/core/UnistylesRegistry.h +6 -4
- package/cxx/core/UnistylesState.cpp +1 -1
- package/cxx/hybridObjects/HybridShadowRegistry.cpp +2 -2
- package/cxx/hybridObjects/HybridStyleSheet.cpp +8 -0
- package/cxx/hybridObjects/HybridStyleSheet.h +3 -3
- package/cxx/hybridObjects/HybridUnistylesRuntime.cpp +1 -1
- package/cxx/parser/Parser.cpp +3 -1
- package/cxx/shadowTree/ShadowTrafficController.h +33 -0
- package/cxx/shadowTree/ShadowTreeManager.cpp +7 -0
- package/cxx/shadowTree/ShadowTreeManager.h +1 -0
- package/lib/commonjs/specs/ShadowRegistry/index.js +1 -1
- package/lib/commonjs/specs/ShadowRegistry/index.js.map +1 -1
- package/lib/module/specs/ShadowRegistry/index.js +1 -1
- package/lib/module/specs/ShadowRegistry/index.js.map +1 -1
- package/lib/typescript/example/App.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/specs/ShadowRegistry/index.ts +1 -1
package/cxx/core/HostStyle.h
CHANGED
@@ -22,7 +22,7 @@ struct JSI_EXPORT HostStyle : public jsi::HostObject {
|
|
22
22
|
private:
|
23
23
|
std::shared_ptr<StyleSheet> _styleSheet;
|
24
24
|
std::shared_ptr<HybridUnistylesRuntime> _unistylesRuntime;
|
25
|
-
std::vector<std::pair<std::string, std::string>> _variants{};
|
25
|
+
std::vector<std::pair<std::string, std::string>> _variants{};
|
26
26
|
};
|
27
27
|
|
28
28
|
}
|
@@ -25,17 +25,23 @@ RootShadowNode::Unshared core::UnistylesCommitHook::shadowTreeWillCommit(
|
|
25
25
|
|
26
26
|
return newRootShadowNode;
|
27
27
|
}
|
28
|
-
|
28
|
+
|
29
|
+
unistylesRootNode->removeUnistylesMountTrait();
|
30
|
+
|
31
|
+
auto& registry = core::UnistylesRegistry::get();
|
29
32
|
auto shadowLeafUpdates = this->getUnistylesUpdates();
|
30
33
|
|
31
34
|
if (shadowLeafUpdates.size() == 0) {
|
32
35
|
return newRootShadowNode;
|
33
36
|
}
|
37
|
+
|
38
|
+
// this is required, otherwise we end up with old shadow tree in mount hook
|
39
|
+
registry.trafficController.stopUnistylesTraffic();
|
34
40
|
|
35
41
|
auto affectedNodes = shadow::ShadowTreeManager::findAffectedNodes(*rootNode, shadowLeafUpdates);
|
36
42
|
|
37
43
|
return std::static_pointer_cast<RootShadowNode>(shadow::ShadowTreeManager::cloneShadowTree(
|
38
|
-
this->
|
44
|
+
*this->_rt,
|
39
45
|
*rootNode,
|
40
46
|
shadowLeafUpdates,
|
41
47
|
affectedNodes
|
@@ -44,11 +50,10 @@ RootShadowNode::Unshared core::UnistylesCommitHook::shadowTreeWillCommit(
|
|
44
50
|
|
45
51
|
shadow::ShadowLeafUpdates core::UnistylesCommitHook::getUnistylesUpdates() {
|
46
52
|
auto& registry = core::UnistylesRegistry::get();
|
47
|
-
auto& rt = this->_unistylesRuntime->getRuntime();
|
48
53
|
auto parser = parser::Parser(this->_unistylesRuntime);
|
49
|
-
auto dependencyMap = registry.buildDependencyMap(
|
54
|
+
auto dependencyMap = registry.buildDependencyMap(*this->_rt);
|
50
55
|
|
51
|
-
parser.rebuildUnistylesInDependencyMap(
|
56
|
+
parser.rebuildUnistylesInDependencyMap(*this->_rt, dependencyMap);
|
52
57
|
|
53
58
|
return parser.dependencyMapToShadowLeafUpdates(dependencyMap);
|
54
59
|
}
|
@@ -5,14 +5,15 @@
|
|
5
5
|
#include "HybridUnistylesRuntime.h"
|
6
6
|
#include "Parser.h"
|
7
7
|
#include "ShadowTreeManager.h"
|
8
|
+
#include "ShadowTrafficController.h"
|
8
9
|
|
9
10
|
namespace margelo::nitro::unistyles::core {
|
10
11
|
|
11
12
|
using namespace facebook::react;
|
12
13
|
|
13
14
|
struct UnistylesCommitHook : public UIManagerCommitHook {
|
14
|
-
UnistylesCommitHook(std::shared_ptr<UIManager> uiManager, std::shared_ptr<HybridUnistylesRuntime> unistylesRuntime)
|
15
|
-
: _unistylesRuntime{unistylesRuntime}, _uiManager{uiManager} {
|
15
|
+
UnistylesCommitHook(std::shared_ptr<UIManager> uiManager, std::shared_ptr<HybridUnistylesRuntime> unistylesRuntime, jsi::Runtime& rt)
|
16
|
+
: _unistylesRuntime{unistylesRuntime}, _uiManager{uiManager}, _rt{&rt} {
|
16
17
|
_uiManager->registerCommitHook(*this);
|
17
18
|
}
|
18
19
|
|
@@ -27,6 +28,7 @@ struct UnistylesCommitHook : public UIManagerCommitHook {
|
|
27
28
|
private:
|
28
29
|
std::shared_ptr<HybridUnistylesRuntime> _unistylesRuntime;
|
29
30
|
std::shared_ptr<UIManager> _uiManager;
|
31
|
+
jsi::Runtime* _rt;
|
30
32
|
};
|
31
33
|
|
32
34
|
}
|
@@ -12,29 +12,42 @@ void core::UnistylesMountHook::shadowTreeDidMount(RootShadowNode::Shared const &
|
|
12
12
|
auto rootNode = std::const_pointer_cast<RootShadowNode>(rootShadowNode);
|
13
13
|
auto unistylesRootNode = std::reinterpret_pointer_cast<core::UnistylesCommitShadowNode>(rootNode);
|
14
14
|
|
15
|
-
//
|
15
|
+
// if this is Unistyles commit, do nothing
|
16
16
|
if (unistylesRootNode->hasUnistylesMountTrait()) {
|
17
17
|
unistylesRootNode->removeUnistylesMountTrait();
|
18
18
|
|
19
19
|
return;
|
20
20
|
}
|
21
21
|
|
22
|
+
// this is React Native commit
|
23
|
+
auto& registry = core::UnistylesRegistry::get();
|
24
|
+
|
25
|
+
registry.trafficController.resumeUnistylesTraffic();
|
26
|
+
|
27
|
+
// this will prevent crash when re-rendering view
|
28
|
+
// as Unistyles has nothing to commit yet, but dependency map
|
29
|
+
// will build all the shadow nodes
|
30
|
+
if (!registry.trafficController.hasUnistylesCommit()) {
|
31
|
+
return;
|
32
|
+
}
|
33
|
+
|
34
|
+
registry.trafficController.setHasUnistylesCommit(false);
|
35
|
+
|
22
36
|
auto shadowLeafUpdates = this->getUnistylesUpdates();
|
23
37
|
|
24
38
|
if (shadowLeafUpdates.size() == 0) {
|
25
39
|
return;
|
26
40
|
}
|
27
41
|
|
28
|
-
shadow::ShadowTreeManager::updateShadowTree(this->
|
42
|
+
shadow::ShadowTreeManager::updateShadowTree(*this->_rt, shadowLeafUpdates);
|
29
43
|
}
|
30
44
|
|
31
45
|
shadow::ShadowLeafUpdates core::UnistylesMountHook::getUnistylesUpdates() {
|
32
46
|
auto& registry = core::UnistylesRegistry::get();
|
33
|
-
auto& rt = this->_unistylesRuntime->getRuntime();
|
34
47
|
auto parser = parser::Parser(this->_unistylesRuntime);
|
35
|
-
auto dependencyMap = registry.buildDependencyMap(
|
48
|
+
auto dependencyMap = registry.buildDependencyMap(*this->_rt);
|
36
49
|
|
37
|
-
parser.rebuildUnistylesInDependencyMap(
|
50
|
+
parser.rebuildUnistylesInDependencyMap(*this->_rt, dependencyMap);
|
38
51
|
|
39
52
|
return parser.dependencyMapToShadowLeafUpdates(dependencyMap);
|
40
53
|
}
|
@@ -11,8 +11,8 @@ namespace margelo::nitro::unistyles::core {
|
|
11
11
|
using namespace facebook::react;
|
12
12
|
|
13
13
|
struct UnistylesMountHook : public UIManagerMountHook {
|
14
|
-
UnistylesMountHook(std::shared_ptr<UIManager> uiManager, std::shared_ptr<HybridUnistylesRuntime> unistylesRuntime)
|
15
|
-
: _unistylesRuntime{unistylesRuntime}, _uiManager{uiManager} {
|
14
|
+
UnistylesMountHook(std::shared_ptr<UIManager> uiManager, std::shared_ptr<HybridUnistylesRuntime> unistylesRuntime, jsi::Runtime& rt)
|
15
|
+
: _unistylesRuntime{unistylesRuntime}, _uiManager{uiManager}, _rt{&rt} {
|
16
16
|
_uiManager->registerMountHook(*this);
|
17
17
|
}
|
18
18
|
|
@@ -23,6 +23,7 @@ struct UnistylesMountHook : public UIManagerMountHook {
|
|
23
23
|
shadow::ShadowLeafUpdates getUnistylesUpdates();
|
24
24
|
|
25
25
|
private:
|
26
|
+
jsi::Runtime* _rt;
|
26
27
|
std::shared_ptr<HybridUnistylesRuntime> _unistylesRuntime;
|
27
28
|
std::shared_ptr<UIManager> _uiManager;
|
28
29
|
};
|
@@ -72,26 +72,31 @@ void core::UnistylesRegistry::updateTheme(jsi::Runtime& rt, std::string& themeNa
|
|
72
72
|
}
|
73
73
|
|
74
74
|
void core::UnistylesRegistry::linkShadowNodeWithUnistyle(
|
75
|
+
jsi::Runtime& rt,
|
75
76
|
const ShadowNodeFamily* shadowNodeFamily,
|
76
77
|
const core::Unistyle::Shared unistyle,
|
77
78
|
Variants& variants,
|
78
79
|
std::vector<folly::dynamic>& arguments
|
79
80
|
) {
|
80
|
-
if (!this->_shadowRegistry.contains(shadowNodeFamily)) {
|
81
|
-
this->_shadowRegistry[shadowNodeFamily] = {};
|
81
|
+
if (!this->_shadowRegistry[&rt].contains(shadowNodeFamily)) {
|
82
|
+
this->_shadowRegistry[&rt][shadowNodeFamily] = {};
|
82
83
|
}
|
83
84
|
|
84
|
-
this->_shadowRegistry[shadowNodeFamily].emplace_back(std::make_shared<UnistyleData>(unistyle, variants, arguments));
|
85
|
+
this->_shadowRegistry[&rt][shadowNodeFamily].emplace_back(std::make_shared<UnistyleData>(unistyle, variants, arguments));
|
85
86
|
}
|
86
87
|
|
87
|
-
void core::UnistylesRegistry::unlinkShadowNodeWithUnistyle(
|
88
|
-
|
88
|
+
void core::UnistylesRegistry::unlinkShadowNodeWithUnistyle(
|
89
|
+
jsi::Runtime& rt,
|
90
|
+
const ShadowNodeFamily* shadowNodeFamily,
|
91
|
+
const core::Unistyle::Shared unistyle
|
92
|
+
) {
|
93
|
+
auto& unistylesVec = this->_shadowRegistry[&rt][shadowNodeFamily];
|
89
94
|
auto it = std::find_if(unistylesVec.begin(), unistylesVec.end(), [unistyle](std::shared_ptr<UnistyleData> unistyleData){
|
90
95
|
return unistyleData->unistyle == unistyle;
|
91
96
|
});
|
92
97
|
|
93
98
|
if (it != unistylesVec.end()) {
|
94
|
-
this->_shadowRegistry[shadowNodeFamily].erase(it);
|
99
|
+
this->_shadowRegistry[&rt][shadowNodeFamily].erase(it);
|
95
100
|
}
|
96
101
|
}
|
97
102
|
|
@@ -104,8 +109,8 @@ std::shared_ptr<core::StyleSheet> core::UnistylesRegistry::addStyleSheet(jsi::Ru
|
|
104
109
|
core::DependencyMap core::UnistylesRegistry::buildDependencyMap(jsi::Runtime& rt, std::vector<UnistyleDependency>& deps) {
|
105
110
|
DependencyMap dependencyMap;
|
106
111
|
std::set<UnistyleDependency> uniqueDependencies(deps.begin(), deps.end());
|
107
|
-
|
108
|
-
for (const auto& [family, unistyles] : this->_shadowRegistry) {
|
112
|
+
|
113
|
+
for (const auto& [family, unistyles] : this->_shadowRegistry[&rt]) {
|
109
114
|
for (const auto& unistyleData : unistyles) {
|
110
115
|
bool hasAnyOfDependencies = std::any_of(
|
111
116
|
unistyleData->unistyle->dependencies.begin(),
|
@@ -114,28 +119,28 @@ core::DependencyMap core::UnistylesRegistry::buildDependencyMap(jsi::Runtime& rt
|
|
114
119
|
return std::find(uniqueDependencies.begin(), uniqueDependencies.end(), dep) != uniqueDependencies.end();
|
115
120
|
}
|
116
121
|
);
|
117
|
-
|
122
|
+
|
118
123
|
if (!hasAnyOfDependencies) {
|
119
124
|
continue;
|
120
125
|
}
|
121
|
-
|
126
|
+
|
122
127
|
// we need to take in count all unistyles from the shadowNode
|
123
128
|
// as user might be using spreads and not all of them may have dependencies
|
124
129
|
for (const auto& unistyleData : unistyles) {
|
125
130
|
dependencyMap[family].emplace_back(unistyleData);
|
126
131
|
}
|
127
|
-
|
132
|
+
|
128
133
|
break;
|
129
134
|
}
|
130
135
|
}
|
131
|
-
|
136
|
+
|
132
137
|
return dependencyMap;
|
133
138
|
}
|
134
139
|
|
135
140
|
core::DependencyMap core::UnistylesRegistry::buildDependencyMap(jsi::Runtime& rt) {
|
136
141
|
DependencyMap dependencyMap;
|
137
|
-
|
138
|
-
for (const auto& [family, unistyles] : this->_shadowRegistry) {
|
142
|
+
|
143
|
+
for (const auto& [family, unistyles] : this->_shadowRegistry[&rt]) {
|
139
144
|
for (const auto& unistyleData : unistyles) {
|
140
145
|
dependencyMap[family].emplace_back(unistyleData);
|
141
146
|
}
|
@@ -11,6 +11,7 @@
|
|
11
11
|
#include "StyleSheet.h"
|
12
12
|
#include "Unistyle.h"
|
13
13
|
#include "UnistyleData.h"
|
14
|
+
#include "ShadowTrafficController.h"
|
14
15
|
|
15
16
|
namespace margelo::nitro::unistyles::core {
|
16
17
|
|
@@ -35,18 +36,19 @@ struct UnistylesRegistry: public StyleSheetRegistry {
|
|
35
36
|
|
36
37
|
UnistylesState& getState(jsi::Runtime& rt);
|
37
38
|
void createState(jsi::Runtime& rt);
|
38
|
-
void linkShadowNodeWithUnistyle(const ShadowNodeFamily*, const core::Unistyle::Shared, Variants& variants, std::vector<folly::dynamic>&);
|
39
|
-
void unlinkShadowNodeWithUnistyle(const ShadowNodeFamily*, const core::Unistyle::Shared);
|
39
|
+
void linkShadowNodeWithUnistyle(jsi::Runtime& rt, const ShadowNodeFamily*, const core::Unistyle::Shared, Variants& variants, std::vector<folly::dynamic>&);
|
40
|
+
void unlinkShadowNodeWithUnistyle(jsi::Runtime& rt, const ShadowNodeFamily*, const core::Unistyle::Shared);
|
40
41
|
std::shared_ptr<core::StyleSheet> addStyleSheet(jsi::Runtime& rt, int tag, core::StyleSheetType type, jsi::Object&& rawValue);
|
41
42
|
DependencyMap buildDependencyMap(jsi::Runtime& rt, std::vector<UnistyleDependency>& deps);
|
42
43
|
DependencyMap buildDependencyMap(jsi::Runtime& rt);
|
43
|
-
|
44
|
+
shadow::ShadowTrafficController trafficController{};
|
45
|
+
|
44
46
|
private:
|
45
47
|
UnistylesRegistry() = default;
|
46
48
|
|
47
49
|
std::unordered_map<jsi::Runtime*, UnistylesState> _states{};
|
48
50
|
std::unordered_map<jsi::Runtime*, std::unordered_map<int, std::shared_ptr<core::StyleSheet>>> _styleSheetRegistry{};
|
49
|
-
std::unordered_map<const ShadowNodeFamily*, std::vector<std::shared_ptr<UnistyleData
|
51
|
+
std::unordered_map<jsi::Runtime*, std::unordered_map<const ShadowNodeFamily*, std::vector<std::shared_ptr<UnistyleData>>>> _shadowRegistry{};
|
50
52
|
};
|
51
53
|
|
52
54
|
UnistylesRegistry& UnistylesRegistry::get() {
|
@@ -91,5 +91,5 @@ int core::UnistylesState::parseColor(jsi::Value& maybeColor) {
|
|
91
91
|
// we must convert it to uint32_t first, otherwise color will be broken
|
92
92
|
uint32_t color = this->_processColorFn.get()->call(*_rt, maybeColor.asString(*_rt)).asNumber();
|
93
93
|
|
94
|
-
return color;
|
94
|
+
return color ? color : 0;
|
95
95
|
}
|
@@ -14,7 +14,7 @@ jsi::Value HybridShadowRegistry::link(jsi::Runtime &rt, const jsi::Value &thisVa
|
|
14
14
|
|
15
15
|
auto& registry = core::UnistylesRegistry::get();
|
16
16
|
|
17
|
-
registry.linkShadowNodeWithUnistyle(&shadowNodeWrapper->getFamily(), unistyleWrapper, variants, arguments);
|
17
|
+
registry.linkShadowNodeWithUnistyle(rt, &shadowNodeWrapper->getFamily(), unistyleWrapper, variants, arguments);
|
18
18
|
|
19
19
|
return jsi::Value::undefined();
|
20
20
|
}
|
@@ -27,7 +27,7 @@ jsi::Value HybridShadowRegistry::unlink(jsi::Runtime &rt, const jsi::Value &this
|
|
27
27
|
|
28
28
|
auto& registry = core::UnistylesRegistry::get();
|
29
29
|
|
30
|
-
registry.unlinkShadowNodeWithUnistyle(&shadowNodeWrapper->getFamily(), unistyleWrapper);
|
30
|
+
registry.unlinkShadowNodeWithUnistyle(rt, &shadowNodeWrapper->getFamily(), unistyleWrapper);
|
31
31
|
|
32
32
|
return jsi::Value::undefined();
|
33
33
|
}
|
@@ -35,6 +35,8 @@ jsi::Value HybridStyleSheet::create(jsi::Runtime& rt, const jsi::Value &thisVal,
|
|
35
35
|
auto style = std::make_shared<core::HostStyle>(registeredStyleSheet, this->_unistylesRuntime);
|
36
36
|
auto styleHostObject = jsi::Object::createFromHostObject(rt, style);
|
37
37
|
|
38
|
+
registry.trafficController.setHasUnistylesCommit(true);
|
39
|
+
|
38
40
|
return styleHostObject;
|
39
41
|
}
|
40
42
|
|
@@ -72,6 +74,7 @@ jsi::Value HybridStyleSheet::configure(jsi::Runtime &rt, const jsi::Value &thisV
|
|
72
74
|
|
73
75
|
verifyAndSelectTheme(rt);
|
74
76
|
loadExternalMethods(thisVal, rt);
|
77
|
+
registerHooks(rt);
|
75
78
|
|
76
79
|
return jsi::Value::undefined();
|
77
80
|
}
|
@@ -239,3 +242,8 @@ void HybridStyleSheet::onPlatformDependenciesChange(std::vector<UnistyleDependen
|
|
239
242
|
|
240
243
|
shadow::ShadowTreeManager::updateShadowTree(rt, shadowLeafUpdates);
|
241
244
|
}
|
245
|
+
|
246
|
+
void HybridStyleSheet::registerHooks(jsi::Runtime& rt) {
|
247
|
+
this->_unistylesCommitHook = std::make_shared<core::UnistylesCommitHook>(this->_uiManager, this->_unistylesRuntime, rt);
|
248
|
+
this->_unistylesMountHook = std::make_shared<core::UnistylesMountHook>(this->_uiManager, this->_unistylesRuntime, rt);
|
249
|
+
}
|
@@ -18,9 +18,7 @@ using namespace facebook::react;
|
|
18
18
|
|
19
19
|
struct HybridStyleSheet: public HybridUnistylesStyleSheetSpec {
|
20
20
|
HybridStyleSheet(std::shared_ptr<HybridUnistylesRuntime> unistylesRuntime, std::shared_ptr<UIManager> uiManager)
|
21
|
-
: HybridObject(TAG), _unistylesRuntime{unistylesRuntime} {
|
22
|
-
this->_unistylesCommitHook = std::make_shared<core::UnistylesCommitHook>(uiManager, unistylesRuntime);
|
23
|
-
this->_unistylesMountHook = std::make_shared<core::UnistylesMountHook>(uiManager, unistylesRuntime);
|
21
|
+
: HybridObject(TAG), _unistylesRuntime{unistylesRuntime}, _uiManager{uiManager} {
|
24
22
|
this->_unistylesRuntime->registerPlatformListener(
|
25
23
|
std::bind(&HybridStyleSheet::onPlatformDependenciesChange, this, std::placeholders::_1)
|
26
24
|
);
|
@@ -54,11 +52,13 @@ private:
|
|
54
52
|
void verifyAndSelectTheme(jsi::Runtime &rt);
|
55
53
|
void setThemeFromColorScheme(jsi::Runtime& rt);
|
56
54
|
void loadExternalMethods(const jsi::Value& thisValue, jsi::Runtime& rt);
|
55
|
+
void registerHooks(jsi::Runtime& rt);
|
57
56
|
void onPlatformDependenciesChange(std::vector<UnistyleDependency> dependencies);
|
58
57
|
|
59
58
|
double __unid = -1;
|
60
59
|
std::shared_ptr<HybridUnistylesRuntime> _unistylesRuntime;
|
61
60
|
std::shared_ptr<core::UnistylesCommitHook> _unistylesCommitHook;
|
62
61
|
std::shared_ptr<core::UnistylesMountHook> _unistylesMountHook;
|
62
|
+
std::shared_ptr<UIManager> _uiManager;
|
63
63
|
};
|
64
64
|
|
@@ -192,7 +192,7 @@ jsi::Value HybridUnistylesRuntime::getMiniRuntimeAsValue(jsi::Runtime& rt) {
|
|
192
192
|
obj.setProperty(rt, "rtl", JSIConverter<bool>::toJSI(rt, miniRuntime.rtl));
|
193
193
|
obj.setProperty(rt, "statusBar", JSIConverter<Dimensions>::toJSI(rt, miniRuntime.statusBar));
|
194
194
|
obj.setProperty(rt, "navigationBar", JSIConverter<Dimensions>::toJSI(rt, miniRuntime.navigationBar));
|
195
|
-
|
195
|
+
|
196
196
|
return obj;
|
197
197
|
}
|
198
198
|
|
package/cxx/parser/Parser.cpp
CHANGED
@@ -531,7 +531,9 @@ bool parser::Parser::shouldApplyCompoundVariants(jsi::Runtime& rt, const Variant
|
|
531
531
|
auto property = compoundVariant.getProperty(rt, variantKey.c_str());
|
532
532
|
auto propertyName = property.isBool()
|
533
533
|
? (property.asBool() ? "true" : "false")
|
534
|
-
: property.
|
534
|
+
: property.isString()
|
535
|
+
? property.asString(rt).utf8(rt)
|
536
|
+
: "";
|
535
537
|
|
536
538
|
if (propertyName != variantValue) {
|
537
539
|
return false;
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#pragma once
|
2
|
+
|
3
|
+
namespace margelo::nitro::unistyles::shadow {
|
4
|
+
|
5
|
+
// Like a traffic officer managing a jam, this struct ensures everything
|
6
|
+
// is synchronized within a set timeframe, controlling flow and preventing chaos.
|
7
|
+
struct ShadowTrafficController {
|
8
|
+
inline bool hasUnistylesCommit() {
|
9
|
+
return _hasCommit;
|
10
|
+
}
|
11
|
+
|
12
|
+
inline void setHasUnistylesCommit(bool hasCommit) {
|
13
|
+
this->_hasCommit = hasCommit;
|
14
|
+
}
|
15
|
+
|
16
|
+
inline bool shouldStop() {
|
17
|
+
return !_canCommit;
|
18
|
+
}
|
19
|
+
|
20
|
+
inline void stopUnistylesTraffic() {
|
21
|
+
this->_canCommit = false;
|
22
|
+
}
|
23
|
+
|
24
|
+
inline void resumeUnistylesTraffic() {
|
25
|
+
this->_canCommit = true;
|
26
|
+
}
|
27
|
+
|
28
|
+
private:
|
29
|
+
bool _hasCommit = false;
|
30
|
+
bool _canCommit = false;
|
31
|
+
};
|
32
|
+
|
33
|
+
}
|
@@ -9,6 +9,13 @@ using AffectedNodes = std::unordered_map<const ShadowNodeFamily*, std::unordered
|
|
9
9
|
void shadow::ShadowTreeManager::updateShadowTree(facebook::jsi::Runtime& rt, shadow::ShadowLeafUpdates& updates) {
|
10
10
|
auto& uiManager = UIManagerBinding::getBinding(rt)->getUIManager();
|
11
11
|
const auto &shadowTreeRegistry = uiManager.getShadowTreeRegistry();
|
12
|
+
auto& registry = core::UnistylesRegistry::get();
|
13
|
+
|
14
|
+
if (registry.trafficController.shouldStop()) {
|
15
|
+
registry.trafficController.setHasUnistylesCommit(true);
|
16
|
+
|
17
|
+
return;
|
18
|
+
}
|
12
19
|
|
13
20
|
shadowTreeRegistry.enumerate([&updates, &rt](const ShadowTree& shadowTree, bool& stop){
|
14
21
|
// we could iterate via updates and create multiple commits
|
@@ -15,7 +15,7 @@ const findShadowNodeForHandle = handle => {
|
|
15
15
|
return node;
|
16
16
|
};
|
17
17
|
HybridShadowRegistry.add = (handle, style, variants, args) => {
|
18
|
-
if (!handle) {
|
18
|
+
if (!handle || typeof style !== 'object') {
|
19
19
|
return;
|
20
20
|
}
|
21
21
|
HybridShadowRegistry.link(findShadowNodeForHandle(handle), style, variants ?? {}, args ?? []);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_reactNativeNitroModules","require","HybridShadowRegistry","NitroModules","createHybridObject","findShadowNodeForHandle","handle","node","__internalInstanceHandle","stateNode","getScrollResponder","getNativeScrollRef","Error","add","style","variants","args","link","remove","__unid","unlink","UnistylesShadowRegistry","exports"],"sourceRoot":"../../../../src","sources":["specs/ShadowRegistry/index.ts"],"mappings":";;;;;;AAAA,IAAAA,wBAAA,GAAAC,OAAA;AAaA,MAAMC,oBAAoB,GAAGC,qCAAY,CAACC,kBAAkB,CAAiB,yBAAyB,CAAC;AAEvG,MAAMC,uBAAuB,GAAIC,MAAkB,IAAK;EACpD,MAAMC,IAAI,GAAGD,MAAM,EAAEE,wBAAwB,EAAEC,SAAS,EAAEF,IAAI,IACvDD,MAAM,EAAEI,kBAAkB,GAAG,CAAC,EAAEC,kBAAkB,GAAG,CAAC,EAAEH,wBAAwB,EAAEC,SAAS,EAAEF,IAAI,IACjGD,MAAM,EAAEK,kBAAkB,GAAG,CAAC,EAAEH,wBAAwB,EAAEC,SAAS,EAAEF,IAAI;EAEhF,IAAI,CAACA,IAAI,EAAE;IACP;IACA,MAAM,IAAIK,KAAK,CAAC,uDAAuD,CAAC;EAC5E;EAEA,OAAOL,IAAI;AACf,CAAC;AAEDL,oBAAoB,CAACW,GAAG,GAAG,CAACP,MAAM,EAAEQ,KAAK,EAAEC,QAAQ,EAAEC,IAAI,KAAK;EAC1D,IAAI,CAACV,MAAM,EAAE;
|
1
|
+
{"version":3,"names":["_reactNativeNitroModules","require","HybridShadowRegistry","NitroModules","createHybridObject","findShadowNodeForHandle","handle","node","__internalInstanceHandle","stateNode","getScrollResponder","getNativeScrollRef","Error","add","style","variants","args","link","remove","__unid","unlink","UnistylesShadowRegistry","exports"],"sourceRoot":"../../../../src","sources":["specs/ShadowRegistry/index.ts"],"mappings":";;;;;;AAAA,IAAAA,wBAAA,GAAAC,OAAA;AAaA,MAAMC,oBAAoB,GAAGC,qCAAY,CAACC,kBAAkB,CAAiB,yBAAyB,CAAC;AAEvG,MAAMC,uBAAuB,GAAIC,MAAkB,IAAK;EACpD,MAAMC,IAAI,GAAGD,MAAM,EAAEE,wBAAwB,EAAEC,SAAS,EAAEF,IAAI,IACvDD,MAAM,EAAEI,kBAAkB,GAAG,CAAC,EAAEC,kBAAkB,GAAG,CAAC,EAAEH,wBAAwB,EAAEC,SAAS,EAAEF,IAAI,IACjGD,MAAM,EAAEK,kBAAkB,GAAG,CAAC,EAAEH,wBAAwB,EAAEC,SAAS,EAAEF,IAAI;EAEhF,IAAI,CAACA,IAAI,EAAE;IACP;IACA,MAAM,IAAIK,KAAK,CAAC,uDAAuD,CAAC;EAC5E;EAEA,OAAOL,IAAI;AACf,CAAC;AAEDL,oBAAoB,CAACW,GAAG,GAAG,CAACP,MAAM,EAAEQ,KAAK,EAAEC,QAAQ,EAAEC,IAAI,KAAK;EAC1D,IAAI,CAACV,MAAM,IAAI,OAAOQ,KAAK,KAAK,QAAQ,EAAE;IACtC;EACJ;EAEAZ,oBAAoB,CAACe,IAAI,CAACZ,uBAAuB,CAACC,MAAM,CAAC,EAAEQ,KAAK,EAAEC,QAAQ,IAAI,CAAC,CAAC,EAAEC,IAAI,IAAI,EAAE,CAAC;AACjG,CAAC;AAEDd,oBAAoB,CAACgB,MAAM,GAAG,CAACZ,MAAM,EAAEQ,KAAK,KAAK;EAC7C,IAAI,CAACR,MAAM,IAAI,CAACQ,KAAK,EAAEK,MAAM,EAAE;IAC3B;EACJ;EAEAjB,oBAAoB,CAACkB,MAAM,CAACf,uBAAuB,CAACC,MAAM,CAAC,EAAEQ,KAAK,CAAC;AACvE,CAAC;AAQM,MAAMO,uBAAuB,GAAAC,OAAA,CAAAD,uBAAA,GAAGnB,oBAA4D","ignoreList":[]}
|
@@ -11,7 +11,7 @@ const findShadowNodeForHandle = handle => {
|
|
11
11
|
return node;
|
12
12
|
};
|
13
13
|
HybridShadowRegistry.add = (handle, style, variants, args) => {
|
14
|
-
if (!handle) {
|
14
|
+
if (!handle || typeof style !== 'object') {
|
15
15
|
return;
|
16
16
|
}
|
17
17
|
HybridShadowRegistry.link(findShadowNodeForHandle(handle), style, variants ?? {}, args ?? []);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["NitroModules","HybridShadowRegistry","createHybridObject","findShadowNodeForHandle","handle","node","__internalInstanceHandle","stateNode","getScrollResponder","getNativeScrollRef","Error","add","style","variants","args","link","remove","__unid","unlink","UnistylesShadowRegistry"],"sourceRoot":"../../../../src","sources":["specs/ShadowRegistry/index.ts"],"mappings":";;AAAA,SAASA,YAAY,QAAQ,4BAA4B;AAazD,MAAMC,oBAAoB,GAAGD,YAAY,CAACE,kBAAkB,CAAiB,yBAAyB,CAAC;AAEvG,MAAMC,uBAAuB,GAAIC,MAAkB,IAAK;EACpD,MAAMC,IAAI,GAAGD,MAAM,EAAEE,wBAAwB,EAAEC,SAAS,EAAEF,IAAI,IACvDD,MAAM,EAAEI,kBAAkB,GAAG,CAAC,EAAEC,kBAAkB,GAAG,CAAC,EAAEH,wBAAwB,EAAEC,SAAS,EAAEF,IAAI,IACjGD,MAAM,EAAEK,kBAAkB,GAAG,CAAC,EAAEH,wBAAwB,EAAEC,SAAS,EAAEF,IAAI;EAEhF,IAAI,CAACA,IAAI,EAAE;IACP;IACA,MAAM,IAAIK,KAAK,CAAC,uDAAuD,CAAC;EAC5E;EAEA,OAAOL,IAAI;AACf,CAAC;AAEDJ,oBAAoB,CAACU,GAAG,GAAG,CAACP,MAAM,EAAEQ,KAAK,EAAEC,QAAQ,EAAEC,IAAI,KAAK;EAC1D,IAAI,CAACV,MAAM,EAAE;
|
1
|
+
{"version":3,"names":["NitroModules","HybridShadowRegistry","createHybridObject","findShadowNodeForHandle","handle","node","__internalInstanceHandle","stateNode","getScrollResponder","getNativeScrollRef","Error","add","style","variants","args","link","remove","__unid","unlink","UnistylesShadowRegistry"],"sourceRoot":"../../../../src","sources":["specs/ShadowRegistry/index.ts"],"mappings":";;AAAA,SAASA,YAAY,QAAQ,4BAA4B;AAazD,MAAMC,oBAAoB,GAAGD,YAAY,CAACE,kBAAkB,CAAiB,yBAAyB,CAAC;AAEvG,MAAMC,uBAAuB,GAAIC,MAAkB,IAAK;EACpD,MAAMC,IAAI,GAAGD,MAAM,EAAEE,wBAAwB,EAAEC,SAAS,EAAEF,IAAI,IACvDD,MAAM,EAAEI,kBAAkB,GAAG,CAAC,EAAEC,kBAAkB,GAAG,CAAC,EAAEH,wBAAwB,EAAEC,SAAS,EAAEF,IAAI,IACjGD,MAAM,EAAEK,kBAAkB,GAAG,CAAC,EAAEH,wBAAwB,EAAEC,SAAS,EAAEF,IAAI;EAEhF,IAAI,CAACA,IAAI,EAAE;IACP;IACA,MAAM,IAAIK,KAAK,CAAC,uDAAuD,CAAC;EAC5E;EAEA,OAAOL,IAAI;AACf,CAAC;AAEDJ,oBAAoB,CAACU,GAAG,GAAG,CAACP,MAAM,EAAEQ,KAAK,EAAEC,QAAQ,EAAEC,IAAI,KAAK;EAC1D,IAAI,CAACV,MAAM,IAAI,OAAOQ,KAAK,KAAK,QAAQ,EAAE;IACtC;EACJ;EAEAX,oBAAoB,CAACc,IAAI,CAACZ,uBAAuB,CAACC,MAAM,CAAC,EAAEQ,KAAK,EAAEC,QAAQ,IAAI,CAAC,CAAC,EAAEC,IAAI,IAAI,EAAE,CAAC;AACjG,CAAC;AAEDb,oBAAoB,CAACe,MAAM,GAAG,CAACZ,MAAM,EAAEQ,KAAK,KAAK;EAC7C,IAAI,CAACR,MAAM,IAAI,CAACQ,KAAK,EAAEK,MAAM,EAAE;IAC3B;EACJ;EAEAhB,oBAAoB,CAACiB,MAAM,CAACf,uBAAuB,CAACC,MAAM,CAAC,EAAEQ,KAAK,CAAC;AACvE,CAAC;AAQD,OAAO,MAAMO,uBAAuB,GAAGlB,oBAA4D","ignoreList":[]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../example/App.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,aAAa,CAAA;AAGpB,eAAO,MAAM,GAAG,
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../example/App.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,aAAa,CAAA;AAGpB,eAAO,MAAM,GAAG,yBAcf,CAAA"}
|
package/package.json
CHANGED