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