UNPKG

1.2 kBPlain TextView Raw
1// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2// SPDX-License-Identifier: Apache-2.0
3import { ConsoleLogger as Logger } from '@aws-amplify/core';
4const logger = new Logger('urlListener');
5
6let handler;
7
8export 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 /* Keep webpack happy */
20 }
21
22 handler =
23 handler ||
24 (({ url, ...rest }: { url: string }) => {
25 logger.debug('urlListener', { url, ...rest });
26 callback({ url });
27 });
28
29 // Handles backward compatibility. removeEventListener is only available on RN versions before 0.65.
30 if (Linking.removeEventListener === typeof 'function') {
31 Linking.removeEventListener('url', handler);
32 Linking.addEventListener('url', handler);
33 } else {
34 // remove() method is only available on RN v0.65+.
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};