1 | function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
2 |
|
3 | import * as React from 'react';
|
4 | import { BaseNavigationContainer } from '@react-navigation/core';
|
5 | import ThemeProvider from './theming/ThemeProvider';
|
6 | import DefaultTheme from './theming/DefaultTheme';
|
7 | import LinkingContext from './LinkingContext';
|
8 | import useThenable from './useThenable';
|
9 | import useLinking from './useLinking';
|
10 | import useDocumentTitle from './useDocumentTitle';
|
11 | import useBackButton from './useBackButton';
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 | const NavigationContainer = React.forwardRef(function NavigationContainer({
|
28 | theme = DefaultTheme,
|
29 | linking,
|
30 | fallback = null,
|
31 | documentTitle,
|
32 | onReady,
|
33 | ...rest
|
34 | }, ref) {
|
35 | const isLinkingEnabled = linking ? linking.enabled !== false : false;
|
36 | const refContainer = React.useRef(null);
|
37 | useBackButton(refContainer);
|
38 | useDocumentTitle(refContainer, documentTitle);
|
39 | const {
|
40 | getInitialState
|
41 | } = useLinking(refContainer, {
|
42 | enabled: isLinkingEnabled,
|
43 | prefixes: [],
|
44 | ...linking
|
45 | });
|
46 | const [isResolved, initialState] = useThenable(getInitialState);
|
47 | React.useImperativeHandle(ref, () => refContainer.current);
|
48 | const linkingContext = React.useMemo(() => ({
|
49 | options: linking
|
50 | }), [linking]);
|
51 | const isReady = rest.initialState != null || !isLinkingEnabled || isResolved;
|
52 | const onReadyRef = React.useRef(onReady);
|
53 | React.useEffect(() => {
|
54 | onReadyRef.current = onReady;
|
55 | });
|
56 | React.useEffect(() => {
|
57 | if (isReady) {
|
58 | var _onReadyRef$current;
|
59 |
|
60 | (_onReadyRef$current = onReadyRef.current) === null || _onReadyRef$current === void 0 ? void 0 : _onReadyRef$current.call(onReadyRef);
|
61 | }
|
62 | }, [isReady]);
|
63 |
|
64 | if (!isReady) {
|
65 |
|
66 |
|
67 | return fallback;
|
68 | }
|
69 |
|
70 | return React.createElement(LinkingContext.Provider, {
|
71 | value: linkingContext
|
72 | }, React.createElement(ThemeProvider, {
|
73 | value: theme
|
74 | }, React.createElement(BaseNavigationContainer, _extends({}, rest, {
|
75 | initialState: rest.initialState == null ? initialState : rest.initialState,
|
76 | ref: refContainer
|
77 | }))));
|
78 | });
|
79 | export default NavigationContainer;
|
80 |
|
\ | No newline at end of file |