@@ -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
411369void HybridStyleSheet::notifyJSListeners (std::vector<UnistyleDependency>& dependencies) {
0 commit comments