1 |
|
2 |
|
3 | import { ConsoleLogger as Logger } from '@aws-amplify/core';
|
4 | const logger = new Logger('urlListener');
|
5 |
|
6 | let handler;
|
7 |
|
8 | export default async callback => {
|
9 | if (handler) {
|
10 | return;
|
11 | }
|
12 |
|
13 | let Linking: any;
|
14 | let AppState: any;
|
15 | let subscription;
|
16 | try {
|
17 | ({ Linking, AppState } = require('react-native'));
|
18 | } catch (error) {
|
19 |
|
20 | }
|
21 |
|
22 | handler =
|
23 | handler ||
|
24 | (({ url, ...rest }: { url: string }) => {
|
25 | logger.debug('urlListener', { url, ...rest });
|
26 | callback({ url });
|
27 | });
|
28 |
|
29 |
|
30 | if (Linking.removeEventListener === typeof 'function') {
|
31 | Linking.removeEventListener('url', handler);
|
32 | Linking.addEventListener('url', handler);
|
33 | } else {
|
34 |
|
35 | subscription?.remove?.();
|
36 | subscription = Linking.addEventListener('url', handler);
|
37 | }
|
38 | AppState.addEventListener('change', async newAppState => {
|
39 | if (newAppState === 'active') {
|
40 | const initialUrl = await Linking.getInitialURL();
|
41 | handler({ url: initialUrl });
|
42 | }
|
43 | });
|
44 | };
|