rnn-codebase
por wix
Navegue e trabalhe com o código-fonte do react-native-navigation (RNN). Use ao corrigir bugs, adicionar funcionalidades, rastrear fluxos de comandos, entender opções…
npx skills add https://github.com/wix/react-native-navigation --skill rnn-codebaseReact Native Navigation Codebase
Architecture Overview
RNN has three layers that mirror each other:
JS/TS (src/) → TurboModule bridge → iOS native (ios/)
→ Android native (android/)
A navigation command (e.g. push) flows:
Navigation.push()→Commands.ts→ processing pipeline →NativeCommandsSender.ts- TurboModule:
RNNTurboModule(iOS) /NavigationTurboModule.kt(Android) - iOS:
RNNCommandsHandler→RNNViewControllerFactory→ UIKit controllers - Android:
Navigator→LayoutFactory→ View-based controllers (no Fragments)
Read ARCHITECTURE.md for the full overview.
Key Cross-Layer Mappings
Layout Types → Native Controllers
| JS Layout Type | iOS Controller | Android Controller |
|---|---|---|
component | RNNComponentViewController | ComponentViewController |
stack | RNNStackController (UINavigationController) | StackController |
bottomTabs | RNNBottomTabsController (UITabBarController) | BottomTabsController |
sideMenu | RNNSideMenuViewController (MMDrawerController) | SideMenuController (DrawerLayout) |
topTabs | RNNTopTabsViewController | TopTabsController (ViewPager) |
splitView | RNNSplitViewController | N/A (iOS only) |
externalComponent | RNNExternalViewController | ExternalComponentViewController |
Options → Presenters
Each controller type has a Presenter that applies options to views:
| iOS Controller | iOS Presenter | Android Presenter |
|---|---|---|
RNNComponentViewController | RNNComponentPresenter | ComponentPresenter |
RNNStackController | RNNStackPresenter + TopBarPresenter | StackPresenter |
RNNBottomTabsController | RNNBottomTabsPresenter | BottomTabsPresenter |
RNNSideMenuViewController | RNNSideMenuPresenter | SideMenuPresenter |
Events (same names both platforms)
| Event | Trigger |
|---|---|
RNN.ComponentDidAppear | Screen becomes visible |
RNN.ComponentDidDisappear | Screen hidden |
RNN.NavigationButtonPressed | TopBar button tap |
RNN.BottomTabSelected | Tab changed |
RNN.ModalDismissed | Modal dismissed |
RNN.ScreenPopped | Screen popped from stack |
RNN.CommandCompleted | Any command finished |
Where to Find Things
By task: "I need to fix/change X"
| Task | JS File(s) | iOS File(s) | Android File(s) |
|---|---|---|---|
| Command execution | src/commands/Commands.ts | ios/RNNCommandsHandler.mm | react/NavigationTurboModule.kt |
| Layout creation | src/commands/LayoutTreeParser.ts | ios/RNNViewControllerFactory.mm | options/LayoutFactory.java |
| Options processing | src/commands/OptionsProcessor.ts | ios/RNNNavigationOptions.mm | options/Options.java |
| Options application | — | ios/*Presenter.mm | viewcontrollers/*Presenter.java |
| TopBar | src/interfaces/Options.ts (TopBarOptions) | ios/TopBarPresenter.mm, ios/RNNUIBarButtonItem.mm | views/stack/topbar/ |
| Bottom tabs | src/interfaces/Options.ts (BottomTabsOptions) | ios/RNNBottomTabsPresenter.mm | viewcontrollers/bottomtabs/ |
| Modals | src/commands/Commands.ts | ios/RNNModalManager.mm | viewcontrollers/modal/ModalStack.java |
| Overlays | src/commands/Commands.ts | ios/RNNOverlayManager.mm | viewcontrollers/overlay/OverlayManager.kt |
| Animations | src/interfaces/Options.ts (AnimationOptions) | ios/ScreenAnimationController.mm | viewcontrollers/stack/StackAnimator.kt |
| React view rendering | — | ios/RNNReactView.mm | react/ReactView.java |
| Events to JS | src/adapters/NativeEventsReceiver.ts | ios/RNNEventEmitter.mm | react/events/EventEmitter.java |
| Component registration | src/components/ComponentRegistry.ts | — | — |
| Deep linking (URL → screen) | src/linking/ (LinkingHandler, URLParser, RouteMatcher, DeferredLinkQueue, ModalLayoutBuilder) | ios/RNNAppDelegate.mm (dispatchDeepLinkURL:, cold-start queue, RCTContentDidAppearNotification) | NavigationActivity.onNewIntent → ReactGateway |
By directory
src/— JS public API, commands, processing pipeline. See src/ARCHITECTURE.mdios/— All Obj-C/C++ native code. See ios/ARCHITECTURE.mdios/TurboModules/— New architecture entry points (RNNTurboModule,RNNTurboManager,RNNTurboCommandsHandler)android/src/main/java/com/reactnativenavigation/— All Java/Kotlin native code. See android/ARCHITECTURE.mdplayground/— Demo app for development and E2E testsplayground/src/screens/— Test screens exercising every featureplayground/e2e/— Detox E2E tests
Options Resolution Order
Options are applied in ascending priority:
- Default options (from
Navigation.setDefaultOptions()) — lowest priority - Static options (from component class or
Navigation.registerComponent) - Options passed in the layout call (e.g.
push,setRoot) mergeOptions()— runtime override, highest priority
JS Processing Pipeline (exact order)
API layout → OptionsCrawler.crawl() → LayoutProcessor.process()
→ LayoutTreeParser.parse() → LayoutTreeCrawler.crawl()
→ OptionsProcessor (colors, assets, custom) → NativeCommandsSender
iOS Patterns
- All controllers conform to
RNNLayoutProtocol RNNBasePresentersubclasses apply options —applyOptionsOnInit:,applyOptions:,mergeOptions:resolvedOptions:- Commands run on main thread (
RCTExecuteOnMainQueue) - React views:
RNNReactViewwrapsRCTSurfaceHostingView(new arch) - Overlays use separate
UIWindowinstances (RNNOverlayWindow) RNNReactComponentRegistrycaches React component instances
Android Patterns
- View-based, NOT Fragment-based
- All commands dispatched via
UiThread.post() ViewController<T extends ViewGroup>is the base —createView()is abstractParentControllerextendsChildControllerextendsViewController- Bottom tabs use
AHBottomNavigationlibrary - Three root layouts in
NavigationActivity: rootLayout, modalsLayout, overlaysLayout - Tab attachment modes:
Together,OnSwitchToTab,AfterInitialTab
Development Workflow
Playground app
yarn start— Metro bundleryarn xcode— Open iOS projectyarn studio— Open Android projectyarn pod-install— Install iOS pods
Testing
yarn test-js— Jest unit testsyarn test-unit-ios— iOS native unit tests (XCTest)yarn test-unit-android— Android native unit tests (JUnit + Robolectric)yarn test-e2e-ios-ci/yarn test-e2e-android-ci— Detox E2E tests
Building
yarn prepare— Buildssrc/→lib/(ESM + types)- Codegen config:
rnnavigationinpackage.json
Common Gotchas
- iOS uses UIKit subclasses (UINavigationController, UITabBarController); Android uses custom View hierarchy
splitViewis iOS-only- Side menu: iOS uses MMDrawerController (3rd party); Android uses DrawerLayout (native)
- Options that exist in JS types may not be implemented on both platforms — check the presenter
passPropsare stored in JSStore, not sent to native (cleared before bridge crossing)- The
lib/folder is generated — never edit it, editsrc/instead - Deep links are processed only after the first
setRoot()resolves; pre-bridge URLs on iOS are queued natively inRNNAppDelegateand flushed onRCTContentDidAppearNotification(bridgeless mode —RCTJavaScriptDidLoadNotificationdoes NOT fire) ModalLayoutBuilderstrips React-reserved keys (ref,key) from URL query params before they reachpassProps, to avoid React 19 ref-validation crashes
Mais skills de wix
wds-docs
wix
Referência de componentes do Wix Design System. Use ao construir UI com @wix/design-system, escolher componentes ou verificar props e exemplos. Aciona em "o que…
official
wix-app
wix
Construa e revise extensões de aplicativos da CLI do Wix — páginas de painel, modais, plugins, plugins de menu, widgets de elemento personalizado, componentes React do Editor, plugins de site,…
official
wix-cli-app-validation
wix
Use ao testar a prontidão do aplicativo, verificar o comportamento em tempo de execução ou validar antes de lançamentos e após alterações no código. Os gatilhos incluem validar, testar,…
official
wix-cli-backend-api
wix
Cria endpoints HTTP para aplicativos Wix CLI. Use apenas quando o usuário solicitar especificamente um endpoint de backend. Use ao construir endpoints de API REST, HTTP de backend…
official
wix-cli-backend-event
wix
Crie extensões de eventos de backend que respondam a eventos do Wix. Use ao implementar manipuladores que são executados quando condições específicas ocorrem em um site. Os gatilhos incluem…
official
wix-cli-context-provider
wix
Cria extensões de provedor de contexto para aplicativos Wix CLI — componentes lógicos (sem interface) que expõem estado compartilhado, funções e configuração para o site filho…
official
wix-cli-dashboard-menu-plugin
wix
DEVE ser usado sempre que o usuário quiser adicionar um item de menu clicável, ação ou opção ao menu de mais ações, menu de ações em massa ou… de uma página existente do painel do Wix.
official
wix-cli-dashboard-modal
wix
Use ao adicionar formulários pop-up, confirmações ou visualizações de detalhes aos painéis do Wix; criar componentes de diálogo reutilizáveis entre as páginas do painel; exibir…
official