Skip to content

Commit 5e66c35

Browse files
committed
chore: unify all paths to applyDependencyChanges
1 parent 353fbd2 commit 5e66c35

2 files changed

Lines changed: 28 additions & 68 deletions

File tree

packages/unistyles/cxx/hybridObjects/HybridStyleSheet.cpp

Lines changed: 26 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -271,33 +271,9 @@ void HybridStyleSheet::onPlatformDependenciesChange(std::vector<UnistyleDependen
271271
return;
272272
}
273273

274-
auto& registry = core::UnistylesRegistry::get();
275-
auto parser = parser::Parser(self->_unistylesRuntime);
276274
auto unistyleDependencies = dependencies;
277-
auto dependencyMap = registry.buildDependencyMap(unistyleDependencies);
278-
279-
// in a later step, we will rebuild only Unistyles with mounted StyleSheets
280-
// however, user may have StyleSheets with components that haven't mounted yet
281-
// we need to rebuild all dependent StyleSheets as well
282-
auto dependentStyleSheets = registry.getStyleSheetsToRefresh(unistyleDependencies);
283-
284-
if (dependencyMap.empty() && dependentStyleSheets.empty()) {
285-
return;
286-
}
287-
288-
// rebuild rawValue for all affected unistyles BEFORE notifying listeners
289-
// so JS consumers (withUnistyles) re-render with fresh closures
290-
parser.rebuildUnistylesInDependencyMap(rt, dependencyMap, dependentStyleSheets, std::nullopt);
291-
292-
if (!dependencyMap.empty()) {
293-
parser.rebuildShadowLeafUpdates(rt, dependencyMap);
294-
}
295-
296-
self->notifyJSListeners(unistyleDependencies);
297275

298-
if (!dependencyMap.empty()) {
299-
shadow::ShadowTreeManager::updateShadowTree(rt);
300-
}
276+
self->applyDependencyChanges(rt, unistyleDependencies, std::nullopt);
301277
});
302278
}
303279

@@ -317,7 +293,6 @@ void HybridStyleSheet::onPlatformNativeDependenciesChange(std::vector<UnistyleDe
317293
}
318294

319295
auto& registry = core::UnistylesRegistry::get();
320-
auto parser = parser::Parser(self->_unistylesRuntime);
321296
auto unistyleDependencies = std::move(dependencies);
322297

323298
// re-compute new breakpoint
@@ -340,30 +315,7 @@ void HybridStyleSheet::onPlatformNativeDependenciesChange(std::vector<UnistyleDe
340315
self->_unistylesRuntime->includeDependenciesForColorSchemeChange(unistyleDependencies);
341316
}
342317

343-
auto dependencyMap = registry.buildDependencyMap(unistyleDependencies);
344-
345-
// in a later step, we will rebuild only Unistyles with mounted StyleSheets
346-
// however, user may have StyleSheets with components that haven't mounted yet
347-
// we need to rebuild all dependent StyleSheets as well
348-
auto dependentStyleSheets = registry.getStyleSheetsToRefresh(unistyleDependencies);
349-
350-
if (dependencyMap.empty() && dependentStyleSheets.empty()) {
351-
return;
352-
}
353-
354-
// rebuild rawValue for all affected unistyles BEFORE notifying listeners
355-
// so JS consumers (withUnistyles) re-render with fresh closures
356-
parser.rebuildUnistylesInDependencyMap(rt, dependencyMap, dependentStyleSheets, miniRuntime);
357-
358-
if (!dependencyMap.empty()) {
359-
parser.rebuildShadowLeafUpdates(rt, dependencyMap);
360-
}
361-
362-
self->notifyJSListeners(unistyleDependencies);
363-
364-
if (!dependencyMap.empty()) {
365-
shadow::ShadowTreeManager::updateShadowTree(rt);
366-
}
318+
self->applyDependencyChanges(rt, unistyleDependencies, miniRuntime);
367319
});
368320
}
369321

@@ -382,30 +334,36 @@ void HybridStyleSheet::onImeChange(UnistylesNativeMiniRuntime miniRuntime) {
382334
}
383335

384336
std::vector<UnistyleDependency> dependencies{UnistyleDependency::IME};
385-
auto& registry = core::UnistylesRegistry::get();
386-
auto parser = parser::Parser(self->_unistylesRuntime);
387-
auto dependencyMap = registry.buildDependencyMap(dependencies);
388337

389-
// include StyleSheets consumed only by JS (withUnistyles) - they aren't in dependencyMap
390-
// but their rawValue must still be refreshed so rerenders read fresh closures
391-
auto dependentStyleSheets = registry.getStyleSheetsToRefresh(dependencies);
338+
self->applyDependencyChanges(rt, dependencies, miniRuntime);
339+
});
340+
}
392341

393-
if (dependencyMap.empty() && dependentStyleSheets.empty()) {
394-
return;
395-
}
342+
void HybridStyleSheet::applyDependencyChanges(jsi::Runtime& rt, std::vector<UnistyleDependency>& dependencies, std::optional<UnistylesNativeMiniRuntime> maybeMiniRuntime) {
343+
auto& registry = core::UnistylesRegistry::get();
344+
auto parser = parser::Parser(this->_unistylesRuntime);
345+
auto dependencyMap = registry.buildDependencyMap(dependencies);
396346

397-
parser.rebuildUnistylesInDependencyMap(rt, dependencyMap, dependentStyleSheets, miniRuntime);
347+
// include StyleSheets consumed only by JS (withUnistyles) — they aren't in dependencyMap
348+
// but their rawValue must still be refreshed so rerenders read fresh closures
349+
auto dependentStyleSheets = registry.getStyleSheetsToRefresh(dependencies);
398350

399-
if (!dependencyMap.empty()) {
400-
parser.rebuildShadowLeafUpdates(rt, dependencyMap);
401-
}
351+
if (dependencyMap.empty() && dependentStyleSheets.empty()) {
352+
return;
353+
}
402354

403-
self->notifyJSListeners(dependencies);
355+
// rebuild rawValue BEFORE notifying listeners so JS rerenders read fresh closures
356+
parser.rebuildUnistylesInDependencyMap(rt, dependencyMap, dependentStyleSheets, maybeMiniRuntime);
404357

405-
if (!dependencyMap.empty()) {
406-
shadow::ShadowTreeManager::updateShadowTree(rt);
407-
}
408-
});
358+
if (!dependencyMap.empty()) {
359+
parser.rebuildShadowLeafUpdates(rt, dependencyMap);
360+
}
361+
362+
this->notifyJSListeners(dependencies);
363+
364+
if (!dependencyMap.empty()) {
365+
shadow::ShadowTreeManager::updateShadowTree(rt);
366+
}
409367
}
410368

411369
void HybridStyleSheet::notifyJSListeners(std::vector<UnistyleDependency>& dependencies) {

packages/unistyles/cxx/hybridObjects/HybridStyleSheet.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <cmath>
44
#include <jsi/jsi.h>
55
#include <mutex>
6+
#include <optional>
67
#include <unordered_map>
78
#include "HybridUnistylesRuntime.h"
89
#include "HybridUnistylesStyleSheetSpec.hpp"
@@ -69,6 +70,7 @@ struct HybridStyleSheet: public HybridUnistylesStyleSheetSpec {
6970
void onPlatformDependenciesChange(std::vector<UnistyleDependency> dependencies);
7071
void onPlatformNativeDependenciesChange(std::vector<UnistyleDependency> dependencies, UnistylesNativeMiniRuntime miniRuntime);
7172
void onImeChange(UnistylesNativeMiniRuntime miniRuntime);
73+
void applyDependencyChanges(jsi::Runtime& rt, std::vector<UnistyleDependency>& dependencies, std::optional<UnistylesNativeMiniRuntime> maybeMiniRuntime);
7274
void notifyJSListeners(std::vector<UnistyleDependency>& dependencies);
7375

7476
bool isInitialized = false;

0 commit comments

Comments
 (0)