Skip to content
This repository was archived by the owner on Dec 7, 2021. It is now read-only.

Commit e149b14

Browse files
authored
Merge pull request #77 from AltSchool/fix/deep-linking-race
Fix race condition in deep linking
2 parents 9aeeea3 + 0e57e1a commit e149b14

File tree

1 file changed

+26
-15
lines changed

1 file changed

+26
-15
lines changed

lib/platforms/react-native.js

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,32 @@
11
import { Linking } from 'react-native'; // eslint-disable-line import/no-unresolved, max-len
22

3-
export const dance = authUrl => Linking.openURL(authUrl)
4-
.then(() => new Promise((resolve, reject) => {
5-
const handleUrl = (url) => {
6-
if (!url || url.indexOf('fail') > -1) {
7-
reject(url);
8-
} else {
9-
resolve(url);
10-
}
11-
};
3+
let previousOnLinkChange;
124

13-
const onLinkChange = ({ url }) => {
14-
Linking.removeEventListener('url', onLinkChange);
15-
handleUrl(url);
16-
};
5+
export const dance = (authUrl) => {
6+
if (previousOnLinkChange) {
7+
Linking.removeEventListener('url', previousOnLinkChange);
8+
}
179

18-
Linking.addEventListener('url', onLinkChange);
19-
}));
10+
return Linking.openURL(authUrl)
11+
.then(() => new Promise((resolve, reject) => {
12+
const handleUrl = (url) => {
13+
if (!url || url.indexOf('fail') > -1) {
14+
reject(url);
15+
} else {
16+
resolve(url);
17+
}
18+
};
19+
20+
const onLinkChange = ({ url }) => {
21+
Linking.removeEventListener('url', onLinkChange);
22+
previousOnLinkChange = undefined;
23+
handleUrl(url);
24+
};
25+
26+
Linking.addEventListener('url', onLinkChange);
27+
28+
previousOnLinkChange = onLinkChange;
29+
}));
30+
};
2031

2132
export const request = fetch;

0 commit comments

Comments
 (0)