UNPKG

2.6 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.NOT_INITIALIZED_ERROR = void 0;
7exports.default = createNavigationContainerRef;
8
9var _routers = require("@react-navigation/routers");
10
11const NOT_INITIALIZED_ERROR = "The 'navigation' object hasn't been initialized yet. This might happen if you don't have a navigator mounted, or if the navigator hasn't finished mounting. See https://reactnavigation.org/docs/navigating-without-navigation-prop#handling-initialization for more details.";
12exports.NOT_INITIALIZED_ERROR = NOT_INITIALIZED_ERROR;
13
14function createNavigationContainerRef() {
15 const methods = [...Object.keys(_routers.CommonActions), 'addListener', 'removeListener', 'resetRoot', 'dispatch', 'isFocused', 'canGoBack', 'getRootState', 'getState', 'getParent', 'getCurrentRoute', 'getCurrentOptions'];
16 const listeners = {};
17
18 const removeListener = (event, callback) => {
19 if (listeners[event]) {
20 listeners[event] = listeners[event].filter(cb => cb !== callback);
21 }
22 };
23
24 let current = null;
25 const ref = {
26 get current() {
27 return current;
28 },
29
30 set current(value) {
31 current = value;
32
33 if (value != null) {
34 Object.entries(listeners).forEach(_ref => {
35 let [event, callbacks] = _ref;
36 callbacks.forEach(callback => {
37 value.addListener(event, callback);
38 });
39 });
40 }
41 },
42
43 isReady: () => {
44 if (current == null) {
45 return false;
46 }
47
48 return current.isReady();
49 },
50 ...methods.reduce((acc, name) => {
51 acc[name] = function () {
52 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
53 args[_key] = arguments[_key];
54 }
55
56 if (current == null) {
57 switch (name) {
58 case 'addListener':
59 {
60 const [event, callback] = args;
61 listeners[event] = listeners[event] || [];
62 listeners[event].push(callback);
63 return () => removeListener(event, callback);
64 }
65
66 case 'removeListener':
67 {
68 const [event, callback] = args;
69 removeListener(event, callback);
70 break;
71 }
72
73 default:
74 console.error(NOT_INITIALIZED_ERROR);
75 }
76 } else {
77 // @ts-expect-error: this is ok
78 return current[name](...args);
79 }
80 };
81
82 return acc;
83 }, {})
84 };
85 return ref;
86}
87//# sourceMappingURL=createNavigationContainerRef.js.map
\No newline at end of file