Skip to content

Commit ffbafb6

Browse files
authored
feat: added component props to screen options (#3)
1 parent a4c71eb commit ffbafb6

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

src/manager.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,11 @@ class NavigationManager {
513513
/**
514514
* Get navigation screen options
515515
*/
516-
private getScreenOptions(component: NavigationComponent, defaultOptions: Options = {}): Options {
516+
private getScreenOptions(
517+
component: NavigationComponent,
518+
defaultOptions: Options = {},
519+
props: Record<string, any> = {},
520+
): Options {
517521
const pickDefaultOptions = [
518522
'topBar.background.color',
519523
'topBar.title.color',
@@ -529,7 +533,8 @@ class NavigationManager {
529533
const options =
530534
// @ts-ignore
531535
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
532-
typeof component.options === 'function' ? component.options({}) : component.options;
536+
typeof component.options === 'function' ? component.options(props) : component.options;
537+
533538
const allowedOptions = _.pick(options, ['topBar', 'bottomTab']);
534539
const pickDefaultNavOptions = _.pick(defaultOptions, pickDefaultOptions);
535540

@@ -583,13 +588,20 @@ class NavigationManager {
583588
return;
584589
}
585590

586-
// @ts-ignore
591+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
592+
const reactInternals = wrappedComponent?.['_reactInternals'];
587593
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
588-
const component = wrappedComponent?.['_reactInternals']?.type as NavigationComponent;
594+
const component = reactInternals?.type as NavigationComponent;
595+
const componentProps =
596+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
597+
reactInternals?.stateNode?.state?.allProps as {
598+
componentId: string;
599+
rootTag: number;
600+
} & Record<string, any>;
589601

590602
stackOptions[stackId] = NavigationManager.mergeScreenOptions(
591603
stackOptions[stackId] ?? {},
592-
this.getScreenOptions(component, defaultOptions),
604+
this.getScreenOptions(component, defaultOptions, componentProps),
593605
);
594606

595607
Nav.mergeOptions(componentId, stackOptions[stackId]);

0 commit comments

Comments
 (0)