Skip to content

Commit 7aa2710

Browse files
[Account-v2] Shaheer / COJ-505 / Single time initialization of onfido (#13102)
* feat: maintains single invokation of onfido * revert: reverts usecallback * fix: fixes logical if case error
1 parent daaa93e commit 7aa2710

File tree

1 file changed

+30
-33
lines changed

1 file changed

+30
-33
lines changed

packages/api/src/hooks/useOnfido.ts

Lines changed: 30 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useCallback, useRef, useMemo, useEffect, useState, useId } from 'react';
1+
import { useCallback, useRef, useMemo, useEffect, useState } from 'react';
22
import useOnfidoServiceToken from './useOnfidoServiceToken';
33
import { ALPHA_2_TO_ALPHA_3, ONFIDO_PHRASES } from '../constants';
44
import useSettings from './useSettings';
@@ -24,8 +24,6 @@ import { v4 as uuidv4 } from 'uuid';
2424
* ```
2525
*/
2626
const useOnfido = () => {
27-
// used to check that we only initialize and load the onfido script once
28-
const [isOnfidoLoaded, setIsOnfidoLoaded] = useState(false);
2927
// use to check that we do not re-attempt to reload the onfido script while its still loading
3028
const [isOnfidoLoading, setIsOnfidoLoading] = useState(false);
3129
const [hasSubmitted, setHasSubmitted] = useState(false);
@@ -89,33 +87,7 @@ const useOnfido = () => {
8987
[submitDocuments]
9088
);
9189

92-
const loadOnfidoSdkScript = () => {
93-
const onfidoScriptNode = document.getElementById('onfido_sdk');
94-
// check if the onfido sdk script has been loaded, and if its still loading the onfido script, don't re-attempt to load the script again
95-
if (!onfidoScriptNode || !isOnfidoLoading) {
96-
setIsOnfidoLoading(true);
97-
const scriptNode = document.createElement('script');
98-
const linkNode = document.createElement('link');
99-
100-
scriptNode.id = 'onfido_sdk';
101-
scriptNode.src = 'https://assets.onfido.com/web-sdk-releases/latest/onfido.min.js';
102-
linkNode.href = 'https://assets.onfido.com/web-sdk-releases/latest/style.css';
103-
linkNode.rel = 'stylesheet';
104-
105-
document.body.appendChild(scriptNode);
106-
document.body.appendChild(linkNode);
107-
108-
scriptNode.addEventListener('load', () => {
109-
setIsOnfidoLoading(false);
110-
setIsOnfidoLoaded(true);
111-
initOnfido();
112-
});
113-
} else {
114-
initOnfido();
115-
}
116-
};
117-
118-
const initOnfido = async () => {
90+
const initOnfido = useCallback(async () => {
11991
const i18NLanguage = window.localStorage.getItem('i18n_language')?.toLowerCase() || 'en';
12092
const onfidoCountryCode =
12193
countryCode.length !== 3 ? ALPHA_2_TO_ALPHA_3[countryCode.toUpperCase()] : settings?.country_code;
@@ -156,13 +128,38 @@ const useOnfido = () => {
156128
'face',
157129
],
158130
});
159-
};
131+
}, [countryCode, onComplete, onfidoContainerId, settings?.country_code, supportedDocuments, token]);
132+
133+
const loadOnfidoSdkScript = useCallback(() => {
134+
const hasOnfidoScriptNode = !!document.getElementById('onfido_sdk');
135+
// check if the onfido sdk script has been loaded, and if its still loading the onfido script, don't re-attempt to load the script again
136+
if (hasOnfidoScriptNode) {
137+
if (!isOnfidoLoading) initOnfido();
138+
} else {
139+
setIsOnfidoLoading(true);
140+
const scriptNode = document.createElement('script');
141+
const linkNode = document.createElement('link');
142+
143+
scriptNode.id = 'onfido_sdk';
144+
scriptNode.src = 'https://assets.onfido.com/web-sdk-releases/latest/onfido.min.js';
145+
linkNode.href = 'https://assets.onfido.com/web-sdk-releases/latest/style.css';
146+
linkNode.rel = 'stylesheet';
147+
148+
document.body.appendChild(scriptNode);
149+
document.body.appendChild(linkNode);
150+
151+
scriptNode.addEventListener('load', () => {
152+
initOnfido();
153+
setIsOnfidoLoading(false);
154+
});
155+
}
156+
}, [initOnfido, isOnfidoLoading]);
160157

161158
useEffect(() => {
162-
if (token && supportedDocuments.length && !isOnfidoLoaded && countryCode) {
159+
if (token && supportedDocuments.length && countryCode) {
163160
loadOnfidoSdkScript();
164161
}
165-
}, [token, supportedDocuments, countryCode]);
162+
}, [token, supportedDocuments, countryCode, loadOnfidoSdkScript]);
166163

167164
return {
168165
data: {

0 commit comments

Comments
 (0)